Úprava textu pomocou regulárnych výrazov

Programovacie jazyky, rady, poradňa...
Peter Michalík
Light Expert
Light Expert
Príspevky: 44
Registrovaný: 11 máj 2008, 9:01

Úprava textu pomocou regulárnych výrazov

Príspevok od používateľa Peter Michalík »

Mám dva textové súbory. V jednom sú mená kníh s indexami. Potreboval by som vytvoriť nový súbor, kde by boli nahradené indexy kníh ich menami z toho prvého súboru a troška preformátovaný. #hocičo sa do výstupu neprepisuje, ignoruje sa. Polia sú oddelené tabulátormi. O1O=Genesis.

Vstupný formát: index_knihy[tab]kapitola[tab]verš[tab][tab]index_ktory_sa_ignoruje[tab]text_verša
Výstupný formát: $$$názov_knihy[medzera]kapitola:verš[nový_riadok]text_verša

Vstup:

Kód: Vybrať všetko

#KJVA poznámka
01O	1	1		10	In the beginning God created the heaven and the earth.
01O	1	2		20	And the earth was without form, and void; and darkness was upon the face of the deep. And the Spirit of God moved upon the face of the waters.
01O	1	3		30	And God said, Let there be light: and there was light.
Výstup:

Kód: Vybrať všetko

$$$Genesis 1:1
In the beginning God created the heaven and the earth.
$$$Genesis 1:2 
And the earth was without form, and void; and darkness was upon the face of the deep. And the Spirit of God moved upon the face of the waters.
$$$Genesis 1:3
And God said, Let there be light: and there was light.
Vedel by mi niekto prosím urobiť konverzný skript? :smt104 :smt048
Prílohy
ub.zip
(1.62 MiB) 18 stiahnutí
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: Úprava textu pomocou regulárnych výrazov

Príspevok od používateľa chrono »

Ak máš python, môžeš vyskúšať niečo takéto:

Kód: Vybrať všetko

#!/usr/bin/env python

import csv
import StringIO

class CommentedFile:
    def __init__(self, f, commentstring="#"):
        self.f = f
        self.commentstring = commentstring

    def next(self):
        line = self.f.next()
        while line.startswith(self.commentstring):
            line = self.f.next()
        return line

    def __iter__(self):
        return self

book_names = {}
reader = csv.reader(CommentedFile(open('book_names.txt', 'rb')), delimiter='\t', quoting=csv.QUOTE_NONE)
for row in reader:
	book_names[row[0]] = row[1]
	
reader = csv.reader(CommentedFile(open('kjva.txt', 'rb')), delimiter='\t', quoting=csv.QUOTE_NONE)
for row in reader:
	print '$$$%s %s:%s\n%s' % (book_names[row[0]], row[1], row[2], row[5])
Prílohy
kjva-cvt.zip
(1.53 MiB) 17 stiahnutí
Peter Michalík
Light Expert
Light Expert
Príspevky: 44
Registrovaný: 11 máj 2008, 9:01

Re: Úprava textu pomocou regulárnych výrazov

Príspevok od používateľa Peter Michalík »

Skript vypisuje v tej čiernej obrazovke tie texty, ale nevytvorí výstupný súbor. Robím niečo zle?
Ak to len vypisuje na obrazovku, mohol by si prosím upraviť ten skript, aby vytvoril nový súbor.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: Úprava textu pomocou regulárnych výrazov

Príspevok od používateľa chrono »

Nechcelo sa mi dávať ukladanie do súboru priamo do toho skriptu, pretože ten výstup sa dá so súboru presmerovať veľmi jednoducho. Stačí použiť niečo ako:

Kód: Vybrať všetko

python skript.py > subor.txt
Peter Michalík
Light Expert
Light Expert
Príspevky: 44
Registrovaný: 11 máj 2008, 9:01

Re: Úprava textu pomocou regulárnych výrazov

Príspevok od používateľa Peter Michalík »

Móóóc Ti ďakujem, super. :) :) :)
Napísať odpoveď