Portál AbcLinuxu, 1. května 2025 02:06

Převod pdb do txt

29.5.2009 08:57 | Přečteno: 6271× | Linux | Výběrový blog

Formát pdb je binárni formát obsahující text. Mám poměrne rozsáhlou sbírku knih v různých formátech z nichž největší část tvoří právě pdb. Na čtení používám FBReader, který mi maximálně vyhovuje.
Problém nastal v okamžiku, kdy jsem potřeboval mou sbírku fulltextově prohledat. Nikde se mi nepodařilo v FBReader-u najít funkci na fulltextové prohledávání. Jediné co jsem našel je hledání v názvu souborů. Jako jedno z možných řešení mě napadl převod pdb do txt a následná aplikace beagel-u. Pro windows existuje několik programu na převod pdb/txt. Jejich problém spočívá v: nejdou pod wine nainstalovat, jsou to trial verze nebo neumějí hromadný převod se zachováním adresářové struktury.

Pod linuxem jsem nasel nějaké programy, ale hromadný převod se mi v nich nepodařilo rozchodit. Náhodou jsem poté narazil na utilitu http://homepage.mac.com/pauljlucas/software/txt2pdbdoc (používám Ubuntu a mam tento program v repozitářích takže jsem kompilaci zdrojového kódu nezkoušel).
Mým cílem byl převod cca 3000 pdb souborů do txt. Situaci komplikovala poměrne složitá adresářová struktura a mezery v názvech souborů. Nakonec jsem se rozhodl napsat jednoduchý skript v bash-i.

1. Využití konstrukce "find .... -exec" a proc to nefungovalo

find . -iname '*.pdb' -exec txt2pdbdoc -d -D -v {} \;

Jednoduchý příkaz, který však nedělal to co má. Na standardní výstup vypisoval "překódované" pdb soubory jako text, ale jaksi nevytvářel vlastni výstupní soubory. Nemohl jsem přijít na to proč nefunguje tak jsem to nechal plavat a cca po měsíci me to napadlo. Program txt2pdbdoc vyžaduje dva argumenty a to vstupní soubor pdb a název výstupního souboru txt. Bohužel find předhazuje jen název vstupního pdb. Jde nejak takovéto situace ošetřit?

2. Využití cyklu while

Řešení je jednoduché a využívá find, cyklus while a utilitu txt2pdbdoc a funguje k mé spokojenosti

find . -iname '*.pdb' | while read F; do txt2pdbdoc -d -D -v "$F" "${F%.pdb}.txt"; done        

Hodnocení: 100 %

        špatnédobré        

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

Komentáře

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

Vložit další komentář

29.5.2009 09:28 Tomáš
Rozbalit Rozbalit vše Re: Převod pdb do txt
Odpovědět | Sbalit | Link | Blokovat | Admin

První řešení šlo jednoduše dodělat:

find . -iname '*.pdb' -exec txt2pdbdoc -d -D -v {} {}.txt\;

29.5.2009 09:45 Uran | skóre: 9 | blog: uranit
Rozbalit Rozbalit vše Re: Převod pdb do txt

Funguje akorat mezi druhou {}.txt a \; ma byt mezera. Jinak nevym jak zajistit aby pripona byla txt a ne pdb.txt

29.5.2009 13:04 Tomáš
Rozbalit Rozbalit vše Re: Převod pdb do txt

Jinak nevym jak zajistit aby pripona byla txt a ne pdb.txt

Na to je příkaz basename, odtrhneš tak pdb. Potom tam přidáš txt.

30.5.2009 21:49 Zaphod | skóre: 37 | blog: zaphod_blog
Rozbalit Rozbalit vše Re: Převod pdb do txt
Odstránenie prípony:
$ FILE=/tmp/pokus/doc.pdb
$ NAME=${FILE%.*}
$ echo $NAME
/tmp/pokus/doc
basename je dobré, ale rozoznáva veľké a malé písmená a odstráni cestu k súboru.
$ FILE=/tmp/pokus/doc.pdb
$ basename $FILE .pdb
doc
ak bude doc.PDB nič neurobí. Výstupný súbor bude v CP1250 (ak sú české texty), text sa dá prekódovať pomocou iconv.

Treba dať prevod do scriptu a ten volať z find -exec
29.5.2009 09:46 petris_ | skóre: 12
Rozbalit Rozbalit vše PDB neni binarni format pro text
Odpovědět | Sbalit | Link | Blokovat | Admin
PDB je databaze pro PalmOS (PalmOS nepouziva souborovy system, ale databazi) a muze v tom byt vpodstate cokoliv - zvuk, obrazek, pismo, levely do hry...
Jan Drábek avatar 29.5.2009 10:29 Jan Drábek | skóre: 41 | blog: Tartar | Brno
Rozbalit Rozbalit vše Re: Převod pdb do txt
Odpovědět | Sbalit | Link | Blokovat | Admin

Ono taky není pdb jako pdb... Měl jsem pdb, které nešli v mém palmovi vůbec otevřít a celé zařízení po jejich pokusu o otevření zkolabovalo... Musel jsem je převádět na text a zase zpátky.

01010010 01000101 01010000 01101100 01001001 00110010 01000100 01100101 01010110
Sleep_Walker avatar 29.5.2009 11:23 Sleep_Walker
Rozbalit Rozbalit vše Re: Převod pdb do txt
To bude spis problem aplikace, ktera to otvira. PalmOS je vinnen tim, ze to dovoli a umre :)
29.5.2009 13:33 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Převod pdb do txt
Odpovědět | Sbalit | Link | Blokovat | Admin
Co to propojit přímo s beaglem? Viz External Filters
When your hammer is C++, everything begins to look like a thumb.
29.5.2009 18:27 Uran | skóre: 9 | blog: uranit
Rozbalit Rozbalit vše Re: Převod pdb do txt

No beagle jsem nezprovoznil. Daemon mi tvrdosive odmita indexovat.

29.5.2009 18:09 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Převod pdb do txt
Odpovědět | Sbalit | Link | Blokovat | Admin
Já dopodus používal PSPad. Pod wine celkem jde.
Ale hromadně převádět asi neumí, dík za tip...
SPD vůbec není proruská
thingie avatar 29.5.2009 22:43 thingie | skóre: 8
Rozbalit Rozbalit vše Re: Převod pdb do txt
Odpovědět | Sbalit | Link | Blokovat | Admin
Hm. já tady teda nějaké věci v PDB z různých zdrojů mám, FBReader to ukáže, ale… jako to je na poblití se, akorát, to fakt nejde číst. Možná je to jenom špatně udělané, samozřejmě.
Růžové lži.
30.5.2009 22:24 Zaphod | skóre: 37 | blog: zaphod_blog
Rozbalit Rozbalit vše Re: Převod pdb do txt
Fbreader má blbé delenie textu do odstavcov. Preto sa ebook nedá čítať. Dá sa to nastaviť pre každý súbor, ale nie pre celý program (aspoň za čias ubuntu 7.04). Na čítanie som preto používal yBoook reader cez wine. Asocioval som si príponu .pdb s týmto programom a bez problému používal.
30.5.2009 22:40 Zaphod | skóre: 37 | blog: zaphod_blog
Rozbalit Rozbalit vše Re: Převod pdb do txt
Druhý dobrý spôsob - script
$ cat bin/rpdb
#!/bin/sh
txt2pdbdoc -d "$1" | iconv -f cp1250 -t utf8 | less
som pridal ako do mc ako prehliadač. Cez F3 som si v mc na konzole prezeral pdb dokumenty.

Založit nové vláknoNahoru

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