[SOLVED] Porównanie całych wierszy z dwóch plików.

Użytkowanie arkusza kalkulacyjnego

[SOLVED] Porównanie całych wierszy z dwóch plików.

Postprzez gnusny » Cz kwi 29, 2021 12:16 pm

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.
Ostatnio edytowano Pn maja 10, 2021 11:16 am przez gnusny, łącznie edytowano 1 raz
LibreOffice 7.0.5 na Windows 10
gnusny
 
Posty: 5
Dołączył(a): N paź 13, 2019 9:54 pm

Re: Porównanie całych wierszy z dwóch plików.

Postprzez Jermor » Cz kwi 29, 2021 3:01 pm

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.
AOO 4.1.10, LO 7.0.6 (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.
Avatar użytkownika
Jermor
 
Posty: 1479
Dołączył(a): So paź 12, 2013 11:09 am

Re: Porównanie całych wierszy z dwóch plików.

Postprzez gnusny » Cz kwi 29, 2021 3:18 pm

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
LibreOffice 7.0.5 na Windows 10
gnusny
 
Posty: 5
Dołączył(a): N paź 13, 2019 9:54 pm

Re: Porównanie całych wierszy z dwóch plików.

Postprzez Jermor » Cz kwi 29, 2021 3:58 pm

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
Załączniki
gnusny.ods
(12.23 KiB) Pobrane 18 razy
AOO 4.1.10, LO 7.0.6 (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.
Avatar użytkownika
Jermor
 
Posty: 1479
Dołączył(a): So paź 12, 2013 11:09 am

Re: Porównanie całych wierszy z dwóch plików.

Postprzez gnusny » Pt kwi 30, 2021 12:56 am

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)))

???
Załączniki
warunkowe.JPG
moje formatowanie warunkowe
LibreOffice 7.0.5 na Windows 10
gnusny
 
Posty: 5
Dołączył(a): N paź 13, 2019 9:54 pm

Re: Porównanie całych wierszy z dwóch plików.

Postprzez Jermor » Pt kwi 30, 2021 11:03 am

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):
Kod: Zaznacz cały   Rozszerz widokZwiń widok
JEŻELI.BŁĄD(PODAJ.POZYCJĘ($A2;$nazwa_drugiego_arkusza.$A$2:$A$4764;0);0)

Wybierz styl do zastosowania i zatwierdź.
AOO 4.1.10, LO 7.0.6 (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.
Avatar użytkownika
Jermor
 
Posty: 1479
Dołączył(a): So paź 12, 2013 11:09 am

Re: Porównanie całych wierszy z dwóch plików.

Postprzez gnusny » Pn maja 10, 2021 11:15 am

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.
LibreOffice 7.0.5 na Windows 10
gnusny
 
Posty: 5
Dołączył(a): N paź 13, 2019 9:54 pm


Powrót do Calc

Kto przegląda forum

Użytkownicy przeglądający ten dział: diam0nd i 6 gości