Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: VTRPE en 8 Agosto 2022, 16:51 pm



Título: Cambiar una o varias palabras dentro de un TXT
Publicado por: VTRPE en 8 Agosto 2022, 16:51 pm
Buenas tardes, he intentado, sin éxito, varias formas de hacer esto con algún script, pero no me ha dado resultado que buscaba.

El TXT realmente es un subtitulo SRT, solo necesito cambiar una palabra (o algunas) pongo un ejm: (subtitulo .SRT en archivo .TXT)

1
00:00:01,550 --> 00:00:04,420
vinieron los dos

2
00:00:04,710 --> 00:00:07,120
llegaron dos personas

3
00:00:07,120 --> 00:00:08,680
varios modos de llegar

4
00:00:08,680 --> 00:00:12,010
dos personas salieron

5
00:00:13,120 --> 00:00:14,680
calcularon doscientos

Quería (por ejm,) poner en mayúscula la palabra dos, o cambiarla por el digito 02, pero en este ejemplo no lo hace correctamente.

Incluso he probado en CMD Batch y en VBScript, y este último me ha dado algún resultado positivo, aunque cambia TODAS las palabras que contienen dos, incluyendo doscientos.....

Set FSO     = CreateObject("Scripting.FileSystemObject")
OldTextFile = ".\temp.txt"
NewTextFile = ".\1.txt"
ReplaceFrom = ("dos")
ReplaceTo   = ("DOS")
 
FSO.CreateTextFile(NewTextFile, 2). _
   Write(Replace(FSO.OpenTextFile(OldTextFile, 1).ReadAll(), _
              ReplaceFrom, ReplaceTo, 1, -1, vbTextCompare))


Algo que se me ocurre en este código, es que:
ReplaceTo   = ("DOS")
sea tal cual, pero añadir, que si hay algún carácter antes o después de esta palabra a modificar, que no lo haga, pero no encuentro la manera de hacerlo con comodines.

Aunque soy mas de CMD, puedo empezar a usar VBS si fuera necesario, pero mis conocimientos son muy limitados en VBS, me defiendo un poco más en comandos CMD, pero no me han dado buenos resultados por el código de tiempo del subtitulo (me cambia -->)

Muchas gracias por vuestra ayuda de antemano, saludos.


Título: Re: Cambiar una o varias palabras dentro de un TXT
Publicado por: MCKSys Argentina en 8 Agosto 2022, 17:26 pm
Algo que se me ocurre en este código, es que:
ReplaceTo   = ("DOS")
sea tal cual, pero añadir, que si hay algún carácter antes o después de esta palabra a modificar, que no lo haga, pero no encuentro la manera de hacerlo con comodines.

Hola!

Puedes probar cambiando:

Código
  1. ReplaceFrom = ("dos")
  2. ReplaceTo   = ("DOS")
  3.  

por

Código
  1. ReplaceFrom = (" dos ")
  2. ReplaceTo   = (" DOS ")
  3.  

Saludos!


Título: Re: Cambiar una o varias palabras dentro de un TXT
Publicado por: VTRPE en 8 Agosto 2022, 17:40 pm
Muchas gracias, pero ya lo probé, en el ejm no funciona en la primera línea "vinieron los dos" Porque después de la última palabra, no hay espacio, es el final de la oración.

Al igual que, tampoco funcionaría en la cuarta línea del ejm. Porque empieza por "dos" sin espacio antes.....

El archivo de subtítulo SRT es de 3 horas de duración, por eso necesito hacerlo con un código, porque de forma manual es imposible.

No sé si se podrá indicar algún comodín o algo, para que, al encontrar un caracter cualquiera antes o después de "dos" no aplique la modificación. Al menos a mi, no se me ocurre otra forma.


Título: Re: Cambiar una o varias palabras dentro de un TXT
Publicado por: MCKSys Argentina en 8 Agosto 2022, 19:14 pm
Hola!

Prueba con el siguiente código:
Código
  1. Set FSO     = CreateObject("Scripting.FileSystemObject")
  2. OldTextFile = ".\temp.txt"
  3. NewTextFile = ".\1.txt"
  4. Set regEx = New RegExp
  5. regEx.IgnoreCase = True
  6. regEx.Global = True
  7. regEx.MultiLine = True
  8. content = FSO.OpenTextFile(OldTextFile, 1).ReadAll()
  9.  
  10. ReplaceTo = "DOS"
  11. regEx.Pattern = "\b(dos)\b"
  12. content = regEx.Replace(content, ReplaceTo)
  13. FSO.CreateTextFile(NewTextFile, 2).Write(content)
  14.  

Más info: https://www.tutorialspoint.com/vbscript/vbscript_reg_expressions.htm (https://www.tutorialspoint.com/vbscript/vbscript_reg_expressions.htm)

Saludos!


Título: Re: Cambiar una o varias palabras dentro de un TXT
Publicado por: VTRPE en 8 Agosto 2022, 19:41 pm
Si señor, ahora sí.
Mil gracias MCKSys Argentina

¿Hay alguna forma de incluir varios cambios de palabras a la vez?

La única que encontré es:

Set FSO     = CreateObject("Scripting.FileSystemObject")
OldTextFile = ".\temp.txt"
NewTextFile = ".\1.txt"
Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Global = True
regEx.MultiLine = True
content = FSO.OpenTextFile(OldTextFile, 1).ReadAll()
 
regEx.Pattern = "\b(dos)\b"
ReplaceTo = "DOS"

content = regEx.Replace(content, ReplaceTo)

regEx.Pattern = "\b(personasl)\b"
ReplaceTo = "PERSONAS"

content = regEx.Replace(content, ReplaceTo)
FSO.CreateTextFile(NewTextFile, 2).Write(content)

Saludos.


Título: Re: Cambiar una o varias palabras dentro de un TXT
Publicado por: MCKSys Argentina en 8 Agosto 2022, 20:01 pm
¿Hay alguna forma de incluir varios cambios de palabras a la vez?

Hola!

Puedes hacer un archivo que contenga lineas que sean: regexp, separador, cadena de reemplazo.
Luego lo lees linea x linea en un bucle y vas aplicando los replace x cada linea.

Saludos!


Título: Re: Cambiar una o varias palabras dentro de un TXT
Publicado por: VTRPE en 8 Agosto 2022, 22:57 pm
Uff, lo he intentado nuevamente, pero no he sido capaz.

Hace unos días intenté con un segundo archivo llamar al primero, con estas soluciones similares:

https://www.iteramos.com/pregunta/3152/como-se-puede-buscar-y-reemplazar-texto-en-un-archivo-utilizando-el-entorno-de-linea-de-comandos-de-windows

Y con:
https://social.msdn.microsoft.com/Forums/es-ES/cd3247b5-e4e7-4646-a3f8-1580617fe663/como-hago-un-scrip-vbs-para-cambiar-palabras-por-otra-de-un-archivo-de-texto?forum=vbes

Pero como no sé usar los argumentos ni armarlo para que funcione, me salen errores por todos lados, al menos en VBScript me cuesta un poco reaprender.

Igualmente, ponle un marcador muy grande a tu respuesta anterior, porque en ningún lado encontré algo similar que realmente me ayude con esto.

Muchas gracias por compartir tu tiempo y conocimientos, un saludo.