[SOLVED] Porównanie całych wierszy z dwóch plików.
[SOLVED] Porównanie całych wierszy z dwóch plików.
Dzień dobry
Przyszedł czas, że na żądanie jednego z urzędów muszę porównać dwa duże pliki.
Zawierają one dane adresowe.
W wierszach są: gmina, powiat, miasto, ulica, nr domu.
Chciałbym porównać te dokumenty w taki sposób że zaznaczyło by powtarzające się całe wiersze.
Próbowałem już porównywać całe dokumenty ale nie spełniło to moich oczekiwań, tu jest potrzebne zaznaczenie powtarzających się całych wierszy.
Dzięki za ewentualne podpowiedzi i pozdrawiam.
Przyszedł czas, że na żądanie jednego z urzędów muszę porównać dwa duże pliki.
Zawierają one dane adresowe.
W wierszach są: gmina, powiat, miasto, ulica, nr domu.
Chciałbym porównać te dokumenty w taki sposób że zaznaczyło by powtarzające się całe wiersze.
Próbowałem już porównywać całe dokumenty ale nie spełniło to moich oczekiwań, tu jest potrzebne zaznaczenie powtarzających się całych wierszy.
Dzięki za ewentualne podpowiedzi i pozdrawiam.
Ostatnio zmieniony pn maja 10, 2021 11:16 am przez gnusny, łącznie zmieniany 1 raz.
LibreOffice 7.0.5 na Windows 10
Re: Porównanie całych wierszy z dwóch plików.
To wcale nie jest łatwy problem. I nie dlatego, że jest jakoś skomplikowany algorytmicznie. Problemem jest zgodność pól w blikach A i B. Np. jeśli nazwa gminy to "Miastków Kościelny" i tak została wpisana do pliku A, natomiast do pliku B została wpisana z podwójną spacją między tymi wyrazami, albo dodatkową spacją na końcu, to nie są to już takie same wpisy. Inny przykład: numer domu w jednym miejscu wpisano jako "15 A" w innym "15A". To są już różne wpisy. To samo dotyczy ulic. Dla człowieka ulica "A. Mickiewicza" i "Mickiewicza" to takie same adresy, dla komputera już nie.
Teraz o twoim zagadnieniu. Rozumiem, że masz dwa pliki arkuszowe Calca, plik A i plik B. Zaznaczenie wierszy mających swój odpowiednik w pliku przeciwnym polega na czym? Na zmianie koloru tła takiego wiersza? Na wpisaniu specjalnego symbolu obok takiego wiersza? Utworzeniu nowego arkusza zawierającego tylko te wiersze, które znajdują się w obu plikach?
Podaj także informację o tym, co rozumiesz przez określenie "dużego pliku"? 1000 wierszy? 20000 wierszy 150000 wierszy?
Jedną z możliwości uzyskania wyniku jest odfiltrowanie rekordów z wykorzystaniem filtra zaawansowanego. Wydaje się to najprostszym rozwiązaniem, jednak w programie Calc Apache OpenOffice (taki masz podpisany w stopce) istnieje ograniczenie liczby pozycji umieszczanych w obszarze kryteriów. W programie Calc LibreOffice liczba wierszy w obszarze kryteriów może być bardzo duża. Przetestowałem wariant mający nawet 1000 wierszy. Oznaczałoby to, że np. dane zawarte w pliku B mogłyby być obszarem kryteriów do wyboru rekordów z pliku A.
O filtrowaniu zaawansowanym możesz poczytać tu: https://yestok.pl/lbo/y59.php#59043
Gdy filtrowanie nie może zostać wykonane, trzeba skorzystać z formuł. Jednak w tym celu należy utworzyć w każdym pliku, dla każdego wiersza unikatowy identyfikator. Tutaj byłoby to połączenie wszystkich pól z wiersza, czyli wykorzystanie funkcji ZŁĄCZ.TEKSTY().
W dodatkowej kolumnie można wykorzystać funkcję: PODAJ.POZYCJĘ(), która wyszukuje identyfikator wygenerowany w pliku A z listą identyfikatorów wygenerowanych w pliku B. Wynik liczbowy mówi o tym, że jest zgodność identyfikatorów, zaś wynik #N/D, że takiego identyfikatora nie znaleziono.
Teraz o twoim zagadnieniu. Rozumiem, że masz dwa pliki arkuszowe Calca, plik A i plik B. Zaznaczenie wierszy mających swój odpowiednik w pliku przeciwnym polega na czym? Na zmianie koloru tła takiego wiersza? Na wpisaniu specjalnego symbolu obok takiego wiersza? Utworzeniu nowego arkusza zawierającego tylko te wiersze, które znajdują się w obu plikach?
Podaj także informację o tym, co rozumiesz przez określenie "dużego pliku"? 1000 wierszy? 20000 wierszy 150000 wierszy?
Jedną z możliwości uzyskania wyniku jest odfiltrowanie rekordów z wykorzystaniem filtra zaawansowanego. Wydaje się to najprostszym rozwiązaniem, jednak w programie Calc Apache OpenOffice (taki masz podpisany w stopce) istnieje ograniczenie liczby pozycji umieszczanych w obszarze kryteriów. W programie Calc LibreOffice liczba wierszy w obszarze kryteriów może być bardzo duża. Przetestowałem wariant mający nawet 1000 wierszy. Oznaczałoby to, że np. dane zawarte w pliku B mogłyby być obszarem kryteriów do wyboru rekordów z pliku A.
O filtrowaniu zaawansowanym możesz poczytać tu: https://yestok.pl/lbo/y59.php#59043
Gdy filtrowanie nie może zostać wykonane, trzeba skorzystać z formuł. Jednak w tym celu należy utworzyć w każdym pliku, dla każdego wiersza unikatowy identyfikator. Tutaj byłoby to połączenie wszystkich pól z wiersza, czyli wykorzystanie funkcji ZŁĄCZ.TEKSTY().
W dodatkowej kolumnie można wykorzystać funkcję: PODAJ.POZYCJĘ(), która wyszukuje identyfikator wygenerowany w pliku A z listą identyfikatorów wygenerowanych w pliku B. Wynik liczbowy mówi o tym, że jest zgodność identyfikatorów, zaś wynik #N/D, że takiego identyfikatora nie znaleziono.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Porównanie całych wierszy z dwóch plików.
Jermor dzięki za zaangażowanie.
No więc tak,
Używam Libreoffice Wersja: 5.4.4.2
Mam dwa pliki Calca A i B (jak trzeba mogę je scalić do jednego)
Zaznaczenie wierszy mających swój odpowiednik w pliku przeciwnym polegało by na zaznaczeniu ich kolorem.
Duży plik - u mnie to jest 9144 wierszy.
Pozdrawiam
No więc tak,
Używam Libreoffice Wersja: 5.4.4.2
Mam dwa pliki Calca A i B (jak trzeba mogę je scalić do jednego)
Zaznaczenie wierszy mających swój odpowiednik w pliku przeciwnym polegało by na zaznaczeniu ich kolorem.
Duży plik - u mnie to jest 9144 wierszy.
Pozdrawiam
LibreOffice 7.0.5 na Windows 10
Re: Porównanie całych wierszy z dwóch plików.
Przykład rozwiązań przesyłam.
Arkusz A zawiera formatowanie warunkowe, wykorzystujące wygenerowane identyfikatory pomocnicze.
Arkusz "Odfiltrowane" zawiera tylko te rekordy z arkusza A, które mają odpowiednik w arkuszu B. Tutaj wykorzystałem filtr zaawansowany.
No i przejdź na wersję 7.0.5
Arkusz A zawiera formatowanie warunkowe, wykorzystujące wygenerowane identyfikatory pomocnicze.
Arkusz "Odfiltrowane" zawiera tylko te rekordy z arkusza A, które mają odpowiednik w arkuszu B. Tutaj wykorzystałem filtr zaawansowany.
No i przejdź na wersję 7.0.5
- Załączniki
-
- gnusny.ods
- (12.23 KiB) Pobrany 143 razy
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Porównanie całych wierszy z dwóch plików.
Jermor jesteś WIELKI !!!!
Przeszedłem na v. 7.0.5
Sposób z formatowaniem warunkowym jest to to, o co mi chodziło.
Próbuję to wdrożyć w moich plikach i jakoś nic mi nie zaznacza.
Wygenerowałem identyfikatory pomocnicze.
W arkuszu A mam zakres B1:J9144
W arkuszu B zakres B1:J4764
Czy mógłbyś opisać zastosowaną przez Ciebie składnię?
Chyba niespecjalnie dobrze ją zmieniłem: NIE(CZY.BŁĄD(PODAJ.POZYCJĘ($A1;$B.$A$1:$A$4764;0)))
???
Przeszedłem na v. 7.0.5
Sposób z formatowaniem warunkowym jest to to, o co mi chodziło.
Próbuję to wdrożyć w moich plikach i jakoś nic mi nie zaznacza.
Wygenerowałem identyfikatory pomocnicze.
W arkuszu A mam zakres B1:J9144
W arkuszu B zakres B1:J4764
Czy mógłbyś opisać zastosowaną przez Ciebie składnię?
Chyba niespecjalnie dobrze ją zmieniłem: NIE(CZY.BŁĄD(PODAJ.POZYCJĘ($A1;$B.$A$1:$A$4764;0)))
???
LibreOffice 7.0.5 na Windows 10
Re: Porównanie całych wierszy z dwóch plików.
Formuła warunkowa w moim przykładzie zakłada, że identyfikatory w arkuszu porównywane są z identyfikatorami w arkuszu o nazwie "B".
Identyfikatory powstały w każdym arkuszu za pomocą połączenia wszystkich pól tworzących wiersz danych.
Stąd zastrzeżenie w moim pierwszym poście, że zawartość każdego pola w wierszu musi być identyczna z odpowiadającymi polami w jakimś wierszu w drugim arkuszu.
Ponieważ przeszedłeś na LIbreOffice (nie zmieniłeś opisu w stopce) masz do dyspozycji inną, wygodniejszą, funkcję: JEŻELI.BŁĄD() i to ona zostanie użyta w formatowaniu warunkowym.
W pierwszym arkuszu zaznacz cały obszar B2:J9144 (założyłem, że w pierwszym wierszu są nazwy kolumn)
Wywołaj formatowanie warunkowe a w nim w polu "Warunek 1" opcję "Formuła jest" i wpisz następującą formułę (znak "=" pomijasz):
Wybierz styl do zastosowania i zatwierdź.
Identyfikatory powstały w każdym arkuszu za pomocą połączenia wszystkich pól tworzących wiersz danych.
Stąd zastrzeżenie w moim pierwszym poście, że zawartość każdego pola w wierszu musi być identyczna z odpowiadającymi polami w jakimś wierszu w drugim arkuszu.
Ponieważ przeszedłeś na LIbreOffice (nie zmieniłeś opisu w stopce) masz do dyspozycji inną, wygodniejszą, funkcję: JEŻELI.BŁĄD() i to ona zostanie użyta w formatowaniu warunkowym.
W pierwszym arkuszu zaznacz cały obszar B2:J9144 (założyłem, że w pierwszym wierszu są nazwy kolumn)
Wywołaj formatowanie warunkowe a w nim w polu "Warunek 1" opcję "Formuła jest" i wpisz następującą formułę (znak "=" pomijasz):
Kod: Zaznacz cały
JEŻELI.BŁĄD(PODAJ.POZYCJĘ($A2;$nazwa_drugiego_arkusza.$A$2:$A$4764;0);0)
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Porównanie całych wierszy z dwóch plików.
Jermor, dziękuję bardzo.
Dzięki Tobie udało mi się skończyć pliki kontrolne na czas.
Super że można tu liczyć na pomoc.
Dzięki Tobie udało mi się skończyć pliki kontrolne na czas.
Super że można tu liczyć na pomoc.
LibreOffice 7.0.5 na Windows 10