Käytän Sublime Text 2 -teksturiohjelmaa, jossa voi etsiä ja korvata tekstiä käyttäen Perl:n Regular Expression syntaksia.
lainaus:
Sublime Text uses Perl Regular Expression Syntax from the Boost library.
Tarkoitus olisi tehdä youtubesta löytyvälle videolle suomenkielinen tekstitys. Helpottaakseni omia hommiani, copypastetin youtuben videosta tarjoaman litteraatin Sublime text 2:een. Tokihan nuo automaattisesti määritellyt ajat ja tekstit on ihan mitä sattuu, mutta ovat kuitenkin suuntaa-antavia ja helpottavat käännöstyötä. Nyt olisi tarkoitus saada etsi-korvaa -toiminnolla litteraatti muutettua sellaiseen muotoon, että koneella oleva tekstitys-ohjelma tunnistaa sen.
Eli
lainaus:
06:57Tekstiä
07:01Lisää tekstiä
07:05Ja vielä tekstiä
pitäisi saada muotoon
lainaus:
1
00:06:57,000 --> 00:06:57,999
Tekstiä2
00:07:01,000 --> 00:07:01,999
Lisää tekstiä3
00:07:05,000 --> 00:07:05,999
Ja vielä tekstiä
Pääsen melko lähelle seuraavalla haulla
lainaus:
Etsi: ^([0-9]{2}:[0-9]{2})
Korvaa: \n\n00:\1,000 --> 00:\1,999\n
Ainoa ongelma siis on, etten osaa laittaa tuota juoksevaa numerointia alkuun. Jos rivejä olisi vaikka 1000 kappaletta, niin tuo olisi melko ikävä tehdä käsipelillä. Voiko sitä tehdä Regular Expressionilla ja jos voi, niin miten?
AkeMake kirjoitti:
Voiko sitä tehdä Regular Expressionilla ja jos voi, niin miten?
Tämän tyyppinen pieni työ hoituu helpoiten suoraan jollain ohjelmointikielellä, kuten: Python, Perl tai REXX.
Jos käsitin tehtävän kuvauksen oikein, niin alla olevan REXX-listauksen pitäisi hoitaa homma:
/* REXX */ infile = 'testi.txt' outfile = 'out.txt' data. = 0 data.numlines = 0 data.time1 = '00:00:00' do while lines(infile) > 0 data.numlines = data.numlines + 1 if data.numlines > 1 then call lineout outfile,'' data.line = linein(infile) data.time2 = strip(translate( data.line, '0123456789:', '0123456789:'xrange() )) data.time = overlay(data.time2, data.time1, 9-length(data.time2)) data.text = substr(data.line,length(data.time2)+1,) call lineout outfile, data.numlines call lineout outfile, data.time',000-->'data.time',999' call lineout outfile, data.text end
Aihe on jo aika vanha, joten et voi enää vastata siihen.