Import wybranych danych z pliku

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
marcinols
Posty: 2
Rejestracja: śr lut 12, 2014 11:01 pm

Import wybranych danych z pliku

Post autor: marcinols »

Witam
Jestem tutaj nowy i szukam Waszej pomocy.
Mam plik tekstowy w formacie :

Kod: Zaznacz cały

date=2014-02-15,src=1,dst="Poland",name="Kowalski",value=8,value2=0,value3=2,value4=0
date=2014-02-15,src=1,dst="Poland",name="Nowak",value=1,value2=0
date=2014-02-15,src=1,dst="Poland",name="Polak",value=3,value2=2,value3=4,value4=0
date=2014-02-15,src=1,dst="Poland",name="Donald",value=6,value3=5,value4=0
date=2014-02-15,src=1,dst="Poland",name="Wojak",value=8,value4=0
Chcę zaimportować wszystkie dane ale tak aby wartości trafiły w odpowiednie kolumny (w zależności od oznaczenia):

Kod: Zaznacz cały

date=2014-02-15  src=1 dst="Poland" name="Kowalski"   value=8   value2=0,   value3=2   value4=0
date=2014-02-15  src=1 dst="Poland" name="Nowak"      value=1   value2=0
date=2014-02-15  src=1 dst="Poland" name="Polak"      value=3   value2=2    value3=4   value4=0
date=2014-02-15  src=1 dst="Poland" name="Donald"     value=6               value3=5   value4=0
date=2014-02-15  src=1 dst="Poland" name="Wojak"      value=8                          value4=0
Oczywiście w importowanym pliku wierszy jest dużo więcej. Będę wdzięczny za pomoc.
OpenOffice 3.1
Jan_J
Posty: 4653
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Import wybranych danych z pliku

Post autor: Jan_J »

Jeżeli jest to unikalny przypadek, albo jeśli masz władzę nad techniką produkcji tego pliku, dodaj przecinki, np.
value=a,value3=x --> value=a,,value3=x
i użyj importu csv/txt z określeniem delimitera.
JJ
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
marcinols
Posty: 2
Rejestracja: śr lut 12, 2014 11:01 pm

Re: Import wybranych danych z pliku

Post autor: marcinols »

Dzięki za odpowiedź.
Niestety nie jest to unikalny przypadek. Jest to log z urządzenia, i nie mam już wpływu na jego produkcję. Wierszy są tysiące stałe są tylko pierwsze pozycje (kolumny). Ilość pozycji Value też może być dużo większa.
OpenOffice 3.1
Jan_J
Posty: 4653
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Import wybranych danych z pliku

Post autor: Jan_J »

Pojedynczy wiersz pliku opisuje coś, co można by nazwać tablicą asocjacyjną, parami klucz/wartość albo “rzadkim” rekordem. Pytania: 1. czy lista kluczy/nazw/haseł jest z góry znana? 2. czy w wartościach może pojawić się przecinek? 3. czy w jednym wierszu mogą pojawić się 2 jednakowe klucze, i co wtedy zrobić?
W takiej sytuacji posłużyłbym się odpowiednim modelem danych. Albo tabelą SQL (w przypadku kiedy z góry znamy nazwy pól), albo listą asocjacyjną/słownikiem. Następnie napisałbym funkcję, która odwzorowuje wiersz pliku na rekord tabeli wynikowej. Gotowca w Calcu nie ma. Funkcja w Basicu, szacuję ok. 50 wierszy kodu; w Pythonie ok. 20. Oszacowanie wziąłem “z głowy” i z doświadczenia. Nie robiłem przymiarek do rozwiązania.
Funkcja taka mogłaby być podpięta jako makro importujące (wybierz plik/wczytaj jego zawartość), albo jako preprocesor (zmień format otrzymanych danych poza OO, potem wczytaj wygenerowany csv).

Chyba mógłbym trochę pomóc...
JJ
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Jan_J
Posty: 4653
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Import wybranych danych z pliku

Post autor: Jan_J »

Mam szkic w Pythonie, bez zabezpieczeń i niedopracowany. Główne wady:
* kolejność kolumn jest de facto dowolna (tj. nie mamy wpływu na nią, i może się zmieniać nieprzewidywalnie);
* brak zabezpieczeń przed naruszeniem formatu wejściowego;
* nie usuwa cudzysłowów z wartości tekstowych;
* jeżeli w cudzysłowach będą przecinki, potraktuje je jak separatory.
Weź załączony plik; zmnień mu rozszerzenie z txt na py; wstaw go do katalogu konfiguracji osobistej open(libre)office\User\Scripts\python (być może podkatalog python będzie trzeba utworzyć; podkatalog Scripts istnieje na pewno). Otwórz nowy skoroszyt w Calcu; wybierz Narzędzia/Makra/Zarządzaj/Python/Moje makra/Nazwa pliku/mainWithUI/Uruchom.
Powinno się pojawić okno dialogowe; wybierasz swój log. Po chwili będzie wczytany do otwartego arkusza.
W środku są też inne funkcje, które dałoby się wykorzystać w trybie preprocesora.
Sprawdziłem, że wkopiowany do właściwego katalogu poprawnie wczytuje poprawnie zbudowany przykładowy plik -- z zastrzeżeniami sformułowanymi wyżej.
Żadnych gwarancji; żadnych zastrzeżeń. Możesz dowolnie przebudowywać ten kod i robić z nim co chcesz.
W miarę wolnego czasu mogę pomóc.
Załączniki
takiImport.txt
kod Pythona; zmień rozszerzenie z .txt na .py
(1.98 KiB) Pobrany 374 razy
JJ
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ