Extraer Contenido de Txt BAT

Iniciado por Blender123, 2 Septiembre 2014, 03:05 AM

0 Miembros y 1 Visitante están viendo este tema.

Blender123

Hola a todos me ayudarian con esto
Tengo 1200 archivos txt
En cada archivo necesito eliminar todo el texto y mantener unicamente el texto que se ecuntra entre estas palabras  <!-- message -->  texto <!-- / message --> y guardar cada  archivo con un nuevo nombre:  Ejemplo 0001.txt guardarlo con el nombre 0001B.txt y que repita el procedimiento con cada uno de los 1200 archivos.

Ejemplo: 0001.txt
Texto, texto, texto, texto, texto, texto, texto, texto, texto, texto, texto, texto
, texto, texto, texto, texto, texto, texto, texto, texto, texto, texto, texto
 
     <!-- message -->
1 - Papel
2 - Lapiz
3 - Agua
     <!-- / message -->
 
Texto, texto, texto, texto, texto, texto, texto, texto, texto, texto, texto, texto
, texto, texto, texto, texto, texto, texto, texto, texto, texto, texto, texto


Resultado esperado:0001B.txt

Citar1 - Papel
2 - Lapiz
3 - Agua

Agradece de ayuda , de antemano muchas gracias.

Eleкtro

#1
Creo recordar que esto es un foro, no Freelancer.com, recuerdalo para la próxima vez, aquí no se hacen trabajos, se ayuda en las dificultades que tengas para hacer el trabajo por ti mismo.

Aparte de eso, Batch es la peor elección como lenguaje para este tipo de tareas, deberías usar cualquier otro lenguaje capacitado para parsear documentos/nodos XML/Html para obtener los comentarios.

Aquí tienes un ejemplo, esto que escribí puedes adaptarlo para procesar una serie de archivos, utilizando un For (y el comando Rename):

Código (dos) [Seleccionar]
@Echo OFF & Setlocal EnableDelayedExpansion

Set "InputFile=.\Archivo.txt"
Set "OutputFile=.\Archivo_New.txt"

Set "CommentLineStart=<.--.[^/]"
Set "CommentLineEnd=<.--./"

Set /A "CutStart=-1"
Set /A "CutEnd=-1"

Set /A "LineCount=0"

For /F "Tokens=1 Delims=:" %%# in (
'Type "%InputFile%" ^| Findstr /I /N "%CommentLineStart%"'
) Do (
Set /A "CutStart=%%#"
)

For /F "Tokens=1 Delims=:" %%# in (
'Type "%InputFile%" ^| Findstr /I /N "%CommentLineEnd%"'
) Do (
Set /A "CutEnd=%%#"
)

Echo Cut from line: %CutStart% to: %CutEnd% | MORE

(For /F "Delims=" %%# in (
'Type "%InputFile%"'
) Do (
Set /A "LineCount+=1"
If !LineCount! GTR %CutStart% If !LineCount! LSS %CutEnd% (
Echo %%#
)
))>"%OutputFile%"

Pause&Exit /B 0


Saludos.








Slikp

Cita de: Eleкtro en  2 Septiembre 2014, 03:45 AM
Aparte de eso, Batch es la peor elección como lenguaje para este tipo de tareas, deberías usar cualquier otro lenguaje capacitado para parsear documentos/nodos XML/Html para obtener los comentarios.

- Saludos Eleкtro, sin ningun motivo de ofensa o sonar sarcástico lo menciono por si se hacen la idea, en repetidas ocasiones e visto que aconsejas lo mismo en ciertas circunstancias, y bueno la verdad es que yo considero que le haces honor a tu antiguo Nick Elektro Hacker y creo saber porque aconsejas siempre esto, sin embargo yo quisiera saber cual es el lenguaje que tu consideras mas eficiente para realizar dicha tarea y porque... 

Eleкtro

#3
Hola Slikp

No he comprendido porque relacionas mis sugerencias con mi antiguo nick "Elektro H@cker", pero si que es verdad que siempre que surge alguien que quiere resolver un problema de este estilo usando Batch intento hacerle saber que Batch no es una buena elección, el único motivo por el que sugiero esto es simple: Batch no fue diseñado para ciertas tareas complejas, pero ojo, no estoy insinuando que esta tarea en particular sea compleja para un programador, sino que es una tarea compleja para la capacidad de Batch. Parsear un documento de texto... , pero parsear un tipo de documento estructurado... No.

No hay un mejor lenguaje para esta tarea, puedes hacerlo con cualquier lenguaje de hoy en día ...incluyendo Batch como te mostré, pero hay lenguajes (lenguajes de verdad, no Batch) que te proporcionan Classes y/o herramientas adicionales de terceros especializadas en este tipo de tareas con las que poder lograr un mejor rendimiento y fiabilidad y conseguir mejores resultados, como son Ruby, Python, o C# / VB.NET (entre otros).

¿Cual es el lenguaje en el que yo haría este tipo de tarea?: C# o VB.NET (ambos son "casi lo mismo" y se conseguiría el mismo resultado al menos para esa tarea)
¿Porqué?: Porque entre todos los lenguajes que he llegado a manejar este es el que decidí tomar como lenguaje principal ya que es el que más me gusta en todas sus características (hablo de VB.NET) las cuales no me voy a poner a describirlas ahora una por una, pero sin duda prefiero hacerlo en .NET que con Scripting.
¿Como lo haría?: En caso de que se trate de un archivo XML, pues parseando con la Class XmlDocument, y en caso de que se trate de un documento Html pues con la librería HtmlAgilityPack.

Si prefieres hacerlo en un lenguaje de Scripting entonces sinceramente no sabría cual recomendarte ni porqué, como ya he dicho puedes hacerlo en cualquiera ya que ofrecen herramientas especializadas, por ejemplo en Ruby tienes la gema 'Nokogori' y en Python2.X tienes el módulo Xml y en Python3.X el módulo Html, solo por nombrar alguna manera de hacerlo en ambos lenguajes, que haber hay más... una infinidad de librerías de terceros.

Mi consejo es que si no quieres complicarte la vida aprendiendo el uso de un lenguaje entonces utilices Batch para hacerlo, siguiendo el ejemplo que te mostré (te expliqué lo que necesitas añadirle al Script para que cumpla las necesidades).

Saludos!