Portál AbcLinuxu, 10. května 2025 08:10

Dotaz: iconv - prekodovanie suborov

19.1.2006 08:56 Stanislav Motyčka | skóre: 9 | Revúca
iconv - prekodovanie suborov
Přečteno: 762×
Odpovědět | Admin
mam 6000 dbf suborov (su vytvorene so znakovou sadou CP852)

Potrebujem ich prekodovat do znakovej sady ISO-8859-2.

Viem, ze syntax prikazu 'iconv' je
iconv -f"CP852" -t"ISO-8859-2" vstupny_subor.dbf > prekodovany_subor.dbf
Avsak vzhladom na objem dat nechcem, aby vytvaralo dalsi 'prekodovany_subor.dbf', ale nech prekoduje 'vstupny_subor.dbf', bez potreby vytvorenia dalsieho suboru (aby sa objem dat nezdvojnasobil)

Viete mi poradit. Dakujem
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.1.2006 09:19 roman
Rozbalit Rozbalit vše Re: iconv - prekodovanie suborov
Odpovědět | | Sbalit | Link | Blokovat | Admin
iconv -f"CP852" -t"ISO-8859-2" > iconv -f"CP852" -t"ISO-8859-2" vstupny_subor.dbf > prekodovany_subor.dbf
Urobte to tak, ze ak je akcia OK tak ho muvnite (mv)na meno povodneho :-) , ja som to tak riesil, a je to ok.
19.1.2006 09:32 Stanislav Motyčka | skóre: 9 | Revúca
Rozbalit Rozbalit vše Re: iconv - prekodovanie suborov
Pre take mnozstvo suborov teda (nakolko iconv nespracovava hromadne subory '*.dbf' jednym prikazom) mam davkovy subor 'prekoduj.bat'>
ls -la *.DBF | awk '{print "iconv -c -f\"CP852\" -t\"CP1250\" "$9" > extrakt/"$9}' > prekoduj.bat
obsah suboru 'prekoduj.bat' je:
iconv -f"CP852" -t"ISO-8859-2" subor1.DBF > extrakt/subor1.DBF
iconv -f"CP852" -t"ISO-8859-2" subor2.DBF > extrakt/subor2.DBF
...
to je sposob, ktoremu som sa chcel vyhnut - prekodovane subory ukladam do podaresara extrakt

Ak som dobre pochopil, tak vy navrhujete iconv -f"CP852" -t"ISO-8859-2" subor1.DBF > extrakt/subor1.DBF && mv extrakt/subor1.DBF .

davkovy subor s takymto obsahom teda vytvorim:
ls -la *.DBF | awk '{print "iconv -c -f\"CP852\" -t\"CP1250\" "$9" > extrakt/"$9 "&& mv extrakt/"$9" ."}' > prekoduj.bat
To znamena, ze podadresar extrakt bude pouzity len ako medzisklad. Hm, aj to je riesenie. Dakujem. S.
19.1.2006 17:43 roman
Rozbalit Rozbalit vše Re: iconv - prekodovanie suborov
dbf??? to asi nie, ale navrhoval som toto "ho muvnite (mv) na meno povodneho"
cize musite odpametat $meno iconvnut ho na $meno.Znak_sada a potom mv $meno.Znak_sada $meno a to je vsetko.
19.1.2006 15:36 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: iconv - prekodovanie suborov
Odpovědět | | Sbalit | Link | Blokovat | Admin
Silně pochybuji, že by iconv uměl sám od sebe konvertovat znakovou sadu v DBF souborech. Občas to asi projde, ale obávám se, že by pokus o překonvertování kódování v hlavičce souboru nebo v číselných položkách mohl nadělat pořádnou paseku.
19.1.2006 18:20 ZAH | skóre: 43 | blog: ZAH
Rozbalit Rozbalit vše Re: iconv - prekodovanie suborov
Souhlasím určitě to nedělejte. Neznám moc spolehlivějších method jak zničit data.
19.1.2006 18:27 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: iconv - prekodovanie suborov
A to já zase ano… :-)

Jinak by možná pomohla konverze do CSV/XML (nebo něčeho jiného čistě textového), konverze kódování a konverze zpět do DBF. Nebo si na to rovnou napsat nějaký udělátor, formát DBF není moc složitý (a snad na to existuje i nějaká knihovna), kdysi dávno jsem si napsal utilitku na české seřazení záznamů v databázi…

19.1.2006 18:39 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: iconv - prekodovanie suborov
Odpovědět | | Sbalit | Link | Blokovat | Admin
V principe to nepojde. iconv vie prekodovavat medzi asi 100 roznymi sadami a niektore (napr. utf-8 alebo utf-16) su viacznakove. Preklad jednoznakoveho kodovania do viacznakoveho by znamel insertovat do subory dalsie znaky a rychlost niecoho takeho by bola udesna.
If you hold a Unix shell up to your ear, you can you hear the C.
19.1.2006 18:42 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: iconv - prekodovanie suborov
Doplnenie:

sed od verzie 4 ma parameter -i, ktory znamena "in place" a robi zmeny "priamo" v subore. Ked to ale pustite na velky subor a pozerate pocas toho, ktore subory ma sed otvorene, zistite, ze v /tmp si vyrobi pomocny file, do ktoreho sype vysledok a na konci ho movne na povodne miesto.
If you hold a Unix shell up to your ear, you can you hear the C.
19.1.2006 19:26 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: iconv - prekodovanie suborov
To je ovšem klasická chyba, takhle se unixový software chovat nemá. Viz např.:
  ~/tmp$ ls -l > link1
  ~/tmp$ ln link1 link2
  ~/tmp$ ls -li link{1,2}
  1605664 -rw-r--r--  2 mike users 34561 2006-01-19 19:23 link1
  1605664 -rw-r--r--  2 mike users 34561 2006-01-19 19:23 link2
  ~/tmp$ sed -e 's/-/+/g' -i link1
  ~/tmp$ ls -li link{1,2}
  1605669 -rw-r--r--  1 mike users 34561 2006-01-19 19:23 link1
  1605664 -rw-r--r--  1 mike users 34561 2006-01-19 19:23 link2

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.