Porównywanie kolumn

Użytkowanie arkusza kalkulacyjnego
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Porównywanie kolumn

Post autor: Jan_J »

Czy porównanie ma być synchroniczne (A1 - B1; A2 - B2 itd), czy asynchroniczne (czy/gdzie A1 ma odpowiednik(i) w B, itd)?
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Dawidek990
Posty: 58
Rejestracja: czw gru 13, 2018 12:15 am

Re: Porównywanie kolumn

Post autor: Dawidek990 »

synochronicznie :)
W A1 bedzie lista jednych produktow w B2 druga lista.
OpenOffice 4.1.6 Windows 10
Dawidek990
Posty: 58
Rejestracja: czw gru 13, 2018 12:15 am

Porównywanie kolumn

Post autor: Dawidek990 »

Witaj, potrzebuje porównać dwie kolumny.
Mam liste produktów swóją, i potrzebują porównać ją z inna lista produktów, żeby sprawdzić czy je u siebie mam.

np:
Gdzies w kolumnie A będzie produkt ARTISTIC WAY WHITE STRUCTURE 20x40
W komórce B1 jest ARTISTIC WAY WHITE

Tutaj powinno wyskoczyć, że wystepuje.
Nazwy mogą się delikatnie różnić, początek jest raczej taki sam.

Potrzebuję czegoś w stylu "Sprawdź, czy w Kolumnie A jest pierwszych 15 znaków z komórki B1"

Następnie przeciągnąc to synchronicznie do B2, B3, B4 itd...

Da sie to zrobić?
OpenOffice 4.1.6 Windows 10
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Porównywanie kolumn

Post autor: Jan_J »

Próbowałem scalić kilka wątków w jeden; nie wyszło, sorry.

Problem: nie bardzo wiadomo o co chodzi.
  1. o sprawdzenie, czy komórki o odpowiadających sobie numerach zawierają odpowiadające sobie treści (było w pierwszym poście, który mi umknął, przepraszam)
  2. o sprawdzenie, czy dana komórka w pierwszej komumnie posiada jakiś odpowiednik w drugiej kolumnie
    Gdzies w kolumnie A będzie produkt ARTISTIC WAY WHITE STRUCTURE 20x40
    W komórce B1 jest ARTISTIC WAY WHITE
  3. listy są w komórkach a nie w kolumnach(!)
    A1 bedzie lista jednych produktow w B2 druga lista
    i to SYNCHRONICZNIE(!?)
Są to różne zadania, odmienne są środki ich realizacji.

Następnie przeciągnąc to synchronicznie do B2, B3, B4 itd...
co w tym przypadku znaczy `synchronicznie`?
ja to rozumiem: pierwszy porównaj z pierwszym, drugi z drugim itd. -- jak punkt a., ale bez pewności, czy słowo zostało dobrze użyte.

Sądzę że chodzi o b., ale pewność byłaby lepsza od domysłów.

W takim przypadku jako pierwsza narzuca się funkcja wyszukująca (np. wyszukaj.pionowo albo podaj pozycję) np.
=podaj.pozycję("^" & B1 & ".*"; A$1:A$100; 0)
z włączonym użyciem wyrażeń regularnych -- wyjdzie liczba: OK, wyjdzie błąd: brak. Jeszcze obudować to testem na wartość liczbową (=czy.liczba(...)) i jest gotowe.
Problem się pojawi jeśli w B1 zostaną użyte znaki sterujące wyrażeń regularnych, jak . * ? [ ] { } \ & itp. Wtedy trzeba by je ratować przed niezrozumieniem za pomocą symbolu sterującego.
Ale być może mając więcej informacji, dałoby się uprościć postępowanie.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Dawidek990
Posty: 58
Rejestracja: czw gru 13, 2018 12:15 am

Re: Porównywanie kolumn

Post autor: Dawidek990 »

dam przyklad....
mamy koumne A
i w niej

1. asd rt 40
2. rtk wt 30
3. wsd ls 20

w B mamy np wsd i chce zeby znalazlo mi ze w kolumnie A w ktorejs komorce znajduje sie lub nie "wsd".
OpenOffice 4.1.6 Windows 10
Dawidek990
Posty: 58
Rejestracja: czw gru 13, 2018 12:15 am

Re: Porównywanie kolumn

Post autor: Dawidek990 »

no wsumie o to chodzi o b, i dziala ta funkcja... powiedz mi istnieje cos podobnego zeby szukalo slow ktore sa w srodku?

np jak jest zdanie ARES GRAPHITE MOSAIC... a bede szukal "graphite mosaic" to znajdzie?
OpenOffice 4.1.6 Windows 10
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Porównywanie kolumn

Post autor: Jan_J »

Wzorzec postaci "^fraza.*" dopasowuje tekst "fraza" umieszczony nia początku komórki. Końcowe ".*" znaczące `cokolwiek, jakiejkolwiek długości` można by pominąć, ale wymaga to odznaczenia opcji [ ] kryteria wyszukiwania odnoszą się do całych komórek.
Jeżeli chcesz znaleźć tekst w środku komórki, wyrzuć ptaszka: "fraza" (o ile [ ] odnoszą się do całej) albo ".*fraza.*" (o ile opcja [x] odnoszą się) jest / ma być zaznaczona.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Dawidek990
Posty: 58
Rejestracja: czw gru 13, 2018 12:15 am

Re: Porównywanie kolumn

Post autor: Dawidek990 »

to mam jeszcze pytanie, co jesli w kolumnie znajduje sie kilka pozycji... on mi pokazuje tylko jedna pierwsza jaka znajdzie np w 5 wierszu pokazuje 5... a chcial bym zbey pokazal mi jak znajdzie 3 np. pozycje o tej nazwie w kolumnie, zeby mi pokazal gdzie sie znajduja np 5,28,7?
OpenOffice 4.1.6 Windows 10
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Porównywanie kolumn

Post autor: Jan_J »

Najłatwiej użyć filtra, ale tu imo nie bardzo...
Jeżeli formułami, trzeba zasymulować filtr za pomocą podaj.pozycję (wyszukiwanie), przesunięcie (ograniczania) oraz indeks (wyłuskiwanie),
tak by każde następne wyszukiwanie odbywało się w bloku od wiersza następującego po poprzednio znalezionym.
Nie jest to trudne, choć przygotowanie wymaga pewnej uwagi. Jeżeli przeszukasz forum, być może opisałem gdzieś gotowy przykład. W tej chwili nie bardzo mam czas, żeby to powtórzyć.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Dawidek990
Posty: 58
Rejestracja: czw gru 13, 2018 12:15 am

Re: Porównywanie kolumn

Post autor: Dawidek990 »

napisz prosze jak bedziesz mial czas ;]
OpenOffice 4.1.6 Windows 10
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Porównywanie kolumn

Post autor: Jermor »

Nie wiem do czego jest potrzebne to działanie. Jeśli jednak chodzi o znalezienie tych wpisów to aby uniknąć tworzenia tego skomplikowanego wyrażenia zaproponowanego przez Jana_J proponuję takie rozwiązanie dla tak rozumianego przeze mnie zagadnienia:
  • Kolumna A zawiera jakieś wpisy tekstowe. Wpisy te mogą się powtarzać.
  • Kolumna B także zawiera jakieś wpisy. Te wpisy nie powtarzają się.
  • Ilość wpisów może być różna w każdej kolumnie.
  • Dla każdego wpisu w kolumnie B należy sprawdzić, czy w kolumnie A znajduje się jego odpowiednik a jeśli się znajduje, podać jego położenie w kolumnie A.
  • Ponieważ wpisy w kolumnie A mogą się powtarzać należy podać w których wierszach występują te powtórzenia.
Proponuje takie oto podejście:
  • Posortuję wpisy w kolumnie A narastająco.
  • W kolumnie D zbudowałem formułę podającą pierwsze wystąpienie wpisu z kolumny B w kolumnie A. Będzie to formuła warunkowa uzależniona od tego czy wpis w ogóle wystąpił.
  • W kolumnie E zbudowałem formułę obliczającą ile razy wpis z kolumny B wystąpił w kolumnie A. Jeśli ta wartość wynosi 0, czyli wpis nie występuje, nie będzie obliczana formuła z odpowiedniej kolumny D.
  • Posortowanie kolumny A spowoduje, że liczba z kolumny E będzie mówiła ile kolejnych wierszy zaczynając od wiersza obliczonego w kolumnie D ma taki sam wpis.
Na tę okoliczność załączam przykładowy plik
Załączniki
Dawidek990.ods
(12.27 KiB) Pobrany 168 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.
Dawidek990
Posty: 58
Rejestracja: czw gru 13, 2018 12:15 am

Re: Porównywanie kolumn

Post autor: Dawidek990 »

1. To jeszcze prosze o napisanie jak bedzie brzmialo polecenie zeby przy szukaniu wpisu np B1 w kolumnie A... szukał nie tylko całego zdania a jego czesci.
np. Potrzebuje znalezc
B1 "ANTRACYT STOPNICA NACINANA 29,7X119,7" ew "STOPNICA NACINANA 29,7X119,7"
w kolumnie A znajduje sie jednak "APENINO ANTRACYT STOPNICA NACINANA 29,7X119,7"

Chodzi o to zeby umial znalezc za pomocą "podaj pozycje" zdanie które może być ucięte :)

2. czy da sie zrobic tak żeby ew pomijal spacjepodczas wyszukiwania? ew konkretne znaki ktore mu wskaze typu * /

3. czy da sie zrobic tak że jeśli wpisuje np: "ACERO BIANCO 50x20" to znajdzie mi również "ACERO BIANCO 20x50" ?
Chodzi mi o to że czasem jest rozmiar na odwrót... wyszukiwarka allegro sobie radzi z tym, ciekaw jestem czy excel też by mógł :)
OpenOffice 4.1.6 Windows 10
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Porównywanie kolumn

Post autor: Jan_J »

Fragment "blabla" gdziekolwiek w tekście opisuje wzorzec ".*blabla.*"
Fragment "ala bela" albo "bela ala" dopasujesz przez "(ala bela|bela ala)".
`dowolna liczba`x`dowolna liczba` --> "[0-9]+x[0-9]+"
a z dopuszczeniem spacji przy x: "[0-9]+ ?x ?[0-9]+"

Ale to wszystko są półśrodki w tym przypadku. Za dużo szczególnych sytuacji.

ACERO BIANCO 50x20
ACERO BIANCO 20x50
ACERO BIANCO 50,0x20,0
ACEROBIANCO 50x20
ACERO BIANCO50x20
ACERO BIANCO 50 x 20
ACERO BIANCO 50×20
ACERO BIANKO 50×20
itd., itd. ...


W arkuszu nie ma gotowej funkcji obliczającej tzw. metrykę edycyjną -- jak daleko leży tekst od tekstu w sensie liczby ruchów żeby rozbić poprawkę. A taka rzecz bardzo pomaga w wyszukiwaniu narzucających podobieństw.
Portale analizujące zapytania mają takie funkcje na wyposażeniu; niektóre bazy danych również.
Można sobie od biedy radzić mnożeniem wariantów. ale będzie to coraz bardziej skomplikowane, a i tak dziurawe.

Dyskusja nad wnioskiem o włączenie metryki Lewensztejna do biblioteki funkcji Calca wisi w bugzilli LibreOffice (https://bugs.documentfoundation.org/sho ... i?id=88964) od roku 2015.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Dawidek990
Posty: 58
Rejestracja: czw gru 13, 2018 12:15 am

Re: Porównywanie kolumn

Post autor: Dawidek990 »

Fragment "blabla" gdziekolwiek w tekście opisuje wzorzec ".*blabla.*"
Fragment "ala bela" albo "bela ala" dopasujesz przez "(ala bela|bela ala)".
`dowolna liczba`x`dowolna liczba` --> "[0-9]+x[0-9]+"
a z dopuszczeniem spacji przy x: "[0-9]+ ?x ?[0-9]+"

jak ma to wygladac w polceniu = ?
bo to jak to piszesz to dla mnie czarna magia ;]
OpenOffice 4.1.6 Windows 10
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Porównywanie kolumn

Post autor: Jan_J »

W pierwszym argumencie funkcji wyszukującej,
tj. albo wyszukaj.pionowo, albo podaj.pozycję
przy włączonym Narzędzia/Opcje/Calc/Oblicz/ [x] wyrażenia regularne w formułach
i wyłączonym Narzędzia/Opcje/Calc/Oblicz/ [ ] kryteria wyszukiwania odnoszą się do całych komórek

Np.
=podaj.pozycję(".*(ab|ba).*", a2:a2000;0)
wskaże numer pierwszego wiersza zawierającego gdzieś w tekście albo "ab", albo "ba".

więcej: https://help.libreoffice.org/Common/Lis ... essions/pl

Z tym, że przestrzegałbym przed rozbudowywaniem takich wyrażeń na okoliczność zmian kolejności, spacji, błędów typografii itp.
Nie do tego służą i bardzo szybko stracą czytelność. Tu by warto zastosować metrykę edycyjną właśnie.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Dawidek990
Posty: 58
Rejestracja: czw gru 13, 2018 12:15 am

Re: Porównywanie kolumn

Post autor: Dawidek990 »

wsumie ten schemat =podaj.pozycję(".*(ab|ba).*", a2:a2000;0) nie dziala, pokazuje mi blad 508

W kolumnie A mam ACERO BIANCO 19,3X120,2

W kolumnie B mam ACERO BIANCO 120,2X19,3
W kolumnie C mam ACERO BIANCO 19,3X120,2

Chce zastosowac cos w stylu =podaj.pozycję(".*(B1|C1).*", a2:a2000;0)
OpenOffice 4.1.6 Windows 10
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Porównywanie kolumn

Post autor: Jan_J »

"ACERO BIANCO (19,3X120,2|120,2X19,3)"
Między cudzysłowami znajduje się opis wyszukiwanego tekstu; nie może tam być adresów komórek.
Da się taki opis umieścić w komórce, ale wtedy odwołanie do niej jest adresem, nie tekstem. Więc bez cudzysłowów.
Wreszcie, pokazany wyżej wzorzec nie jest wszechmogący. Pasują do niego tylko dwa wpisy:
ACERO BIANCO 19,3X120,2
oraz
ACERO BIANCO 120,2X19,3

zaś nie pasuje cały kosmos, m.in.
ACERO BIANCO 19,3x120,2
ACERO BIANCO 19,3 X 120,2
itp.

Więc rozwiąże on kilka problemów tylko pod warunkiem zachowania pewnej dyscypliny w tworzeniu opisów. A to znaczy, że tylko częściowo rozwiąże.

Czy nie byłoby lepiej stworzyć bazowy układ kolumn

A B C
Nazwa Szerokość Długość

w którym dopuścilibyśmy tekstowe nazwy oraz liczbowe wymiary (weryfikowane przez poprawność danych)
i z których generowalibyśmy opis w Twojej postaci, powiedzmy w kolumnie D, jako
=A2 & jeżeli(B2>B2; B2 & "X" & C2; C2 & "X" & B2)

po czym do dalszej obróbki/wyszukiwania wchodziłyby już tylko dane z D, to znaczy o ujednoliconym zapisie.
Nie byłyby potrzebne żadne warianty notacji. Porządek na wejściu upraszcza zarządzanie danymi.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Dawidek990
Posty: 58
Rejestracja: czw gru 13, 2018 12:15 am

Re: Porównywanie kolumn

Post autor: Dawidek990 »

musial bysmi chyba pokazac jeden przyklad jak by mialo to wygladac ;]

akurat co do 19x50 a 50x19 to innych roznic nie ma.
OpenOffice 4.1.6 Windows 10
ODPOWIEDZ