Strona 1 z 1

Import wybranych danych z pliku

: śr lut 12, 2014 11:47 pm
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.

Re: Import wybranych danych z pliku

: czw lut 13, 2014 1:32 am
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.

Re: Import wybranych danych z pliku

: czw lut 13, 2014 8:29 am
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.

Re: Import wybranych danych z pliku

: czw lut 13, 2014 1:12 pm
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...

Re: Import wybranych danych z pliku

: czw lut 13, 2014 3:53 pm
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.