Parsování souboru csv

Kateřina

Parsování souboru csv
« kdy: 18. 02. 2013, 22:22:07 »
Zdravím, potřebovala bych rozparsrovat soubor, ve kterém jsou jednotlivá slova oddělena čárkou. Potřebuji to udělat přím v bashi. Nevíte náhodou někdo jak na to? Je to vlastně csv soubor, který se používá pro kopírování zboží na web. Děkuji Musí to být v bashi


student

Re:Parsování souboru csv
« Odpověď #1 kdy: 18. 02. 2013, 22:31:47 »
Co tak zmena IFS a potom read? To zvladne okrem bashu aj shell bez bashovskych featur.

Honza Vrana

Re:Parsování souboru csv
« Odpověď #2 kdy: 18. 02. 2013, 22:32:28 »
Krasny den,

staci takove to nakopnuti ?

echo "jabka,hrusky,kakao" | cut -d\, -f2

Jinak pouzit nejaky textovy editor jako je sed nebo awk ale zalezi na tom co si predstavujete pod pojmem  "Parsování souboru csv" cily jake data ze souboru chcete ziskat a co snima chcete delat.

S pozdravem Honza Vrana

PanKapitanRUM

Re:Parsování souboru csv
« Odpověď #3 kdy: 18. 02. 2013, 22:41:19 »
S CSV můžeš hodně snadno dojet na zákysu (vím o čem mluvím) a určitě bych to nedělal čistě v BASH.
Parser si můžeš napsat v PHP a bude to o poznání spolehlivější, PHP můžeš pouštět i z konzole.
Jestli na tom jsi jako moji zákazníci, pak se ti dříve nebo v později objeví čárka, já mám třeba položku něco jako "Dárek za 50,- Kč" a "Věc s kolem,světlem a motykou". Asi chápeš, že ty čárky v tom nadělají paseku, proto je dobré vstup ošetřit tak, abys měl jistotu, že Parser NIKDY nedostane špatná data, protože jinak se jebne a řešíš, nebo se nejebne a máš paseku v DB, což někoho nasere.

PanKapitanRUM

Re:Parsování souboru csv
« Odpověď #4 kdy: 18. 02. 2013, 22:55:12 »
Doplním, že jsem se jistou dobu snažil v parseru používat regulérní výrazy, ale pokaždé se objevil větší špek ::) přesně ve stylu "Pepa vymyslel zcela blbuvzdornou věc a bůh mu dokázal, že umí udělat ještě většího blba." Od té doby mám parser udělaný tak, že kontroluji výstup, kde provádím čištění, aby se do parseru opravdu nikdy nedostalo nic, co by se mu nemuselo líbit. Pokud to máš tak udělané, můžeš to parsovat jen v Bash. Pokud máš eshop (my děláme Magento), tak je nejlepší to udělat pořádně, nejlépe neexportovat do CSV, ale do XML.
Jinak často stačí i jen jednoduchá úprava parseru, kdy se jako delimiter (oddělovač) použije středník ;
Bez středníku se hromada lidí prostě obejde, můžeš řádek testovat na počet středníků.

Například mějme řádek:
podprda;červená;c;500;605

A teď vývojový diagram:
A) provedeš otestování, kolik středníků je v řádku, pokud jich je víc než 4, pošleš výstup do LOG.TXT a přeskočíš záznam
B) pokud záznam není přeskočený, provedeš import
C) po dokončení importu zjistíš, jestli existuje LOG.TXT, tj. jestli se vůbec vytvořil, pokud ano, pošleš si ho mailem a smažeš ho

Tohle je poměrně použitelný způsob zpracování.
Splňuje to požadavky na stabilitu, tedy do DB se nikdy nesmí dostat svinstvo.
Splňuje to požadavek na upozornění, kdy ti přijde mail a ty ho můžeš předat dál, tj. neztrácíš chybu.
Splňuje to požadavek na jednoduchost, čím je řešení složitější, tím je v něm víc chyb a tedy nesplňuje požadavek na stabilitu, protože nezajistí, že se do DB nedostane svinstvo.

No dělej si s tím co chceš.


Náhodný kolemjdoucí

Re:Parsování souboru csv
« Odpověď #5 kdy: 18. 02. 2013, 23:05:25 »
Doplním, že jsem se jistou dobu snažil v parseru používat regulérní výrazy, ale...

Jak praví lidové moudro: Máme-li problém, můžeme ho zkusit řešit pomocí regulárního výrazu. Pak budeme mít problémy dva.

PanKapitanRUM

Re:Parsování souboru csv
« Odpověď #6 kdy: 18. 02. 2013, 23:10:09 »
S tím nemohu souhlasit, rozhodně bych to neoznačil za "problémy dva" ::)
Moje poslední funkční verze regulérního výrazu připomínala jádro Linuxu přepsané do BrainFucku (http://cs.wikipedia.org/wiki/Brainfuck::) :-\ :o


zelen

Re:Parsování souboru csv
« Odpověď #7 kdy: 18. 02. 2013, 23:45:02 »
S CSV můžeš hodně snadno dojet na zákysu (vím o čem mluvím) a určitě bych to nedělal čistě v BASH.
Parser si můžeš napsat v PHP a bude to o poznání spolehlivější, PHP můžeš pouštět i z konzole.
Jestli na tom jsi jako moji zákazníci, pak se ti dříve nebo v později objeví čárka, já mám třeba položku něco jako "Dárek za 50,- Kč" a "Věc s kolem,světlem a motykou". Asi chápeš, že ty čárky v tom nadělají paseku, proto je dobré vstup ošetřit tak, abys měl jistotu, že Parser NIKDY nedostane špatná data, protože jinak se jebne a řešíš, nebo se nejebne a máš paseku v DB, což někoho nasere.
IMHO psát vlastní program je nejhorší možnost (trvá to dlouho, první verze budou plné chyb a ostatní se s tím nebudou chtít učit). Existují spousty CSV parserů v nejrůznějších jazycích. Vybrat si ten správný zabere minimum času a všechny špeky už v něm budou vychytané.

Pavel

Re:Parsování souboru csv
« Odpověď #8 kdy: 19. 02. 2013, 08:46:21 »
A teď vývojový diagram:
A) provedeš otestování, kolik středníků je v řádku, pokud jich je víc než 4, pošleš výstup do LOG.TXT a přeskočíš záznam
B) pokud záznam není přeskočený, provedeš import
C) po dokončení importu zjistíš, jestli existuje LOG.TXT, tj. jestli se vůbec vytvořil, pokud ano, pošleš si ho mailem a smažeš ho

Splňuje to požadavky na stabilitu, tedy do DB se nikdy nesmí dostat svinstvo.

Iba za predpokladu, ze tam nemate viacriadkovy zaznam.

Pouzivat dobrovolne CVS v dnesnej dobe mi pride, ako prejav ustrnutia v minulom tisicroci.

Radek Miček

Re:Parsování souboru csv
« Odpověď #9 kdy: 19. 02. 2013, 10:28:01 »
Citace
Pouzivat dobrovolne CVS v dnesnej dobe mi pride, ako prejav ustrnutia v minulom tisicroci.

CSV je velmi jednoduchý formát, a pokud dostačuje, není IMO důvod použít složitější.

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Parsování souboru csv
« Odpověď #10 kdy: 19. 02. 2013, 11:01:59 »
Iba za predpokladu, ze tam nemate viacriadkovy zaznam.

No, to jaksi u CSV nebyva zvykem, ne?

Radek Miček

Re:Parsování souboru csv
« Odpověď #11 kdy: 19. 02. 2013, 11:08:05 »
Citace
No, to jaksi u CSV nebyva zvykem, ne?

A proč ne?

Blabla

Re:Parsování souboru csv
« Odpověď #12 kdy: 19. 02. 2013, 11:37:31 »
Protože standardní oddělovač je CRLLF?

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Parsování souboru csv
« Odpověď #13 kdy: 19. 02. 2013, 21:00:51 »
Citace
No, to jaksi u CSV nebyva zvykem, ne?

A proč ne?

Protoze by to bylo prakticke, jak hrabe do postele.  http://tools.ietf.org/html/rfc4180#page-2

Radek Miček

Re:Parsování souboru csv
« Odpověď #14 kdy: 19. 02. 2013, 21:10:28 »
Citace
Protoze by to bylo prakticke, jak hrabe do postele.  http://tools.ietf.org/html/rfc4180#page-2

Proč by to bylo praktické, jak hrábě do postele?

V RFC čtu:

Kód: [Vybrat]
6.  Fields containing line breaks (CRLF), double quotes, and commas
    should be enclosed in double-quotes.  For example:

    "aaa","b CRLF
    bb","ccc" CRLF
    zzz,yyy,xxx

Takže CSV může obsahovat víceřádkový záznam, ne?