Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Lukáš 10. 07. 2012, 20:15:26

Název: Zrušit konce řádků ale ne odstavce
Přispěvatel: Lukáš 10. 07. 2012, 20:15:26
Zdravím, mám takový problém: Mám textový soubor, který je blbě udělaný. Každý řádek má po určitém počtu znaků tvrdý řádkový zlom. Potřebuji tyto ruční zlomy zrušit, ale zároveň potřebuji zachovat odstavce. Ty začínají tradičně dvěma mezerami na začátku řádky.

Zadání tedy je: smaž konce řádků, ale ne v místech, kdy další řádek začíná dvěma mezerami.

Dá se to nějak jednoduše udělat? Řeším to u několika e-knih, které jsou takhle špatně naskenované a nedá se s nimi pak rozumně pracovat. Díky
Název: Re:Zrušit konce řádků ale ne odstavce
Přispěvatel: pepak 10. 07. 2012, 20:27:09
Tady jsem to řešil:
http://www.pepak.net/e-books/prevod-z-txtpdb-do-html/
Název: Re:Zrušit konce řádků ale ne odstavce
Přispěvatel: Mirek Prýmek 10. 07. 2012, 21:08:07
Se sedem se mi nechce párat :)

Kód: [Vybrat]
python -c 'import sys,re; print re.sub("\n(?!  )"," ",sys.stdin.read(),0,re.MULTILINE)' < file

Za vykřičníkem jsou ty dvě mezery.
Název: Re:Zrušit konce řádků ale ne odstavce
Přispěvatel: wamba 10. 07. 2012, 23:27:48
v perlu třeba takhle
Kód: [Vybrat]
perl -00 -nE 'tr/\n/ /;say ' soubor.txt
Název: Re:Zrušit konce řádků ale ne odstavce
Přispěvatel: Mirek Prýmek 11. 07. 2012, 00:00:26
v perlu třeba takhle
Kód: [Vybrat]
perl -00 -nE 'tr/\n/ /;say ' soubor.txt
A kde jsou tam ty dvě mezery?
Název: Re:Zrušit konce řádků ale ne odstavce
Přispěvatel: wamba 11. 07. 2012, 01:15:17
Citace
A kde jsou tam ty dvě mezery?

 blbě jsem četl

(to je tak, kdy se neuvede příklad a ja čtu jen na půl)

ta třeba mě napadá
Kód: [Vybrat]
perl -00 -pE 's/\n(?!  )//g' souborcož asi bude ekvivalent toho řešení v pythonu

popř.
Kód: [Vybrat]
perl -00 -pE 's/(\n  )|\n/$1/g' soubor
nebo i
Kód: [Vybrat]
perl -00 -pE 's/\n//g;s/  /\n  /g' souborcož není úplně podle zadání, ale i tak by to mohlo postačovat