Como mucha gente no pudo seguirle el hilo por la sintaxis, vamos a partirlo en
cachitos y explicando paso a paso, para que vean que es una
boludez, solo que
inentendible sin
identacion y
colorcitos :p
Acá va:
File.
open($*[0],"r+") do |f|
lines = f.
readlinesdelay = $*[1]
En la primer linea, abro el archivo. El "$*[0]" es el equivalente al
argv, es el primer
parámetro pasado por linea de comando. El "do |f|" hace que el archivo abierto sea contenido en la variable "f".
La segunda linea ubica en la variable "
lines" (a partir de ahora un
array) todas las lineas del archivo abierto.
"
Delay" es un
parámetro de entrada para el tiempo que
queres correr el subtitulo.
j = 1
i = 0
while(i < lines.length)
"j" es la variable que va guardando por que parlamento del subtitulo va. "i" es un contador sobre las lineas del subtitulo.
El while es el clasico, que itera hasta el final de las lineas.
if(lines[i].to_i.eql? j)
i = i+1
prin, fin = lines[i].chomp.split(/-->/)
Si la linea en la que estoy es igual a el numero de parlamento que espero, entonces la siguiente linea es la que quiero modificar.
Con el "prin, fin = lines[i].chomp.split(/-->/)", ubico en la variable prin el principio del split y en fin la segunda parte del split. Aca spliteo por -->, utilizando los caracteres de escape.
El siguiente codigo se repite 2 veces, pero voy a explicarlo solo una.
h,min,seg = prin.chomp.split(/:/)
seg2,dec = seg.chomp.split(/,/)
seg2 = seg2.to_i + delay.to_i
if(seg2 > 60)
min = min + 1
seg2 = seg2 - 60
if(min >60)
h = h + 1
min = min - 60
Spliteo de nuevo, y guardo la hora, minuto y segundo, lo mismo con los segundos y los decimales. A los segundos le sumo el delay que tenia por parametro, y reacomodo.
Esta quizas es la linea mas fea, pero tiene mucho sentido:
lines[i] = h+ "\:" + min + "\:" + seg2.to_s + "\," + dec + "\-\-\>" +
hf+ "\:" +
minf + "\:" +
seg2f.
to_s + "\," +
decf + "\n"
Solamente le asigno a la linea que contiene el tiempo del parlamento, los elementos modificados. Es verdad, se ve fea sin
colorcitos, pero bueno, no quedaba otra.
Por ultimo,
reestablezco indices y hago:
f.pos = 0
f.
print lines f.truncate(f.pos)
La primera vuelve el cursor al inicio del archivo,
despues imprimo el
array "
lines" modificado en el archivo y hago... ¿
truncate? no se para que, pero sin eso no funcionaba :p Que sincero que soy,
je.
Espero que esto les haga ver que no es tan feo como
creian... porque sino me van a venir a buscar de
Ruby a
cagarme a trompadas, por no hacerles buena publicidad :(
Saludos gente!
Blue!