Extraer línea de un TXT, modificarla y guardarla en otro TXT

Necesitaría un batch para trabajar un con txt llamado "D:\stimated.txt", copiarle la línea nro 30 completa y pegarla a otro txt llamado "D:\Grilla.txt", sustituirle el primer espacio que se genera, también sustituirle ";" por Tabulaciones y borrar el último carácter " / " y que modifique el txt llamado "D:\Grilla.txt".

Ejemplo de cómo está
 Dato;Dato;Dato;Dato;Dato / 

Ejemplo de cómo quiero que quede
Dato Dato Dato Dato Dato

Básicamente extraerle la línea 30 y colocar esos datos en otro txt ya modificado.

Desde ya agradecido como siempre.

1 respuesta

Respuesta
1

Prueba con esto:

@echo off
Setlocal EnableDelayedExpansion
set archorig=D:\stimated.txt
set archdest=D:\Grilla.txt
for /f "skip=29 tokens=*" %%a in (%archorig%) do (
rem   echo esta es la linea 30: %%a
   set lin=%%a
   set lin=!lin:;=    !
   set lin=!lin:/=!
   echo !lin!>>%archdest%
   goto :eof
   )

Asegúrate que lo que aparece a la derecha del igual en la línea 8 sea un tabulador y no el número de espacios en los que lo haya convertido el editor de la página. Ya me dirás.

Muchísimas gracias! funciona perfecto

Hola buenas tardes, te molesto para hacerte otra consulta relacionada a este mismo tema y con el mismo archivo, misma ubicación.

Que tal si en lugar de sólo extraer una sola línea, quisiera extraer un segmento, es decir desde la línea 30 hasta la línea 50? ¿cómo tendría que hacer en ese caso? Muchas gracias de antemano

A ver si esto hace lo que quieres:

@echo off
Setlocal EnableDelayedExpansion
set archorig=D:\stimated.txt
set archdest=D:\Grilla.txt
set /a cont=1
for /f "skip=29 tokens=*" %%a in (%archorig%) do (
   set lin=%%a
   set lin=!lin:;=    !
   set lin=!lin:/=!
   echo !lin!>>%archdest%
   set /a cont+=1
   if !cont! equ 21 goto :eof
   )

Hola, necesito que me des una mano con este batch y no se como solucionarlo.

Los 29 saltos de línea en ocasiones son 30 en otras son 28, a lo que en determinado momento el contenido extraído al archivo destino cambia.

Lo que estaba pensando era buscar el texto con el siguiente comando:

find /i "location" "D:\archorig.txt"

Extraer la línea completa y aplicarle el formato de sustituirle ";" por Tabulaciones y borrar el último carácter con espacios incluidos " / " para continuar a guardar el archivo destino. Creo que así se solucionaría e iría directo a copiar lo que se necesita. ¿Podrías ayudarme por favor?

Como en este hilo ha habido cambios necesito que me aclares un poco tu nuevo planteamiento. ¿Se trata de detectar en las líneas del archivo origen (STIMATED.TXT) la aparición de la cadena "location", editar esas líneas en el sentido indicado de sustituir los ";" por tabulaciones y borrar el último " /" antes de copiarla en el archivo destino? ¿No hay ahora tramos de líneas copiadas? Si fuera así prueba con este bat:

@echo off
Setlocal EnableDelayedExpansion
set archorig=D:\stimated.txt
set archdest=D:\Grilla.txt
for /f "tokens=*" %%a in ('findstr /i /c:"location" "%archorig%"') do (
   set lin=%%a
   set lin=!lin:;=    !
   set lin=!lin:/=!
   Echo ! Lin!>>"%Archdest%"
   )

En el archivo txt llamado grilla me imprime lo siguiente

ECHO est desactivado.

En la ejecución mediante consola no muestra ningún error, de hecho muestra que extrae la línea completa tal cual la necesito, solo que al imprimirlo en el txt final deja ese mensaje dentro

Seguramente es porque el editor de la página ha separado la primera admiración ("!") del nombre de la variable (LIN) en el comando ECHO de la última línea ejecutable. Debe ser:

Echo ! Lin!>>"%Archdest%"

Por si lo vuelve a hacer debe aparecer ! Lin! Y no ! Lin!

Lo ha vuelto a hacer y no solo en el snippet sino también en el texto. Debe estar como aparece en el del 21 de noviembre aunque es mejor que la referencia a la variable ARCHDEST figure entre comillas por si el path del archivo destino contiene espacios (eso sí que lo ha respetado aunque haya puesto en mayúsculas la "A" de archdest).

¡Gracias! impresionante como siempre. agregué una línea al batch para que borre el contenido del archivo de txt de destino, porque me iba agregando línea tras línea una abajo de la otra, me dirás si hice bien

echo. > D:\Grilla.txt

Creo que no borra el archivo sino que solo le borra el contenido y luego hace el resto.

P/D: conoces algún manual o curso de ms dos para poder meterme más a fondo con la programación de batch? me he dado cuenta que me sirve mucho para el trabajo, aunque me sabrás decir si Phyton es igual de versátil o mejor que ms dos para tareas como las que vengo pidiendo.

Me alegro de que te haya servido.

Para borrar el archivo D:\GRILLA.TXT (variable ARCHDEST) de modo completamente silencioso puedes usar el siguiente comando:

Del /q "%archdest%">nul 2>&1

Respecto a cursos sobre MSDOS tengo por ahí anotados algunos, aunque ya ni los recuerdo, pero si me guardé el enlace será porque valían la pena:

https://todohacker.com/tutoriales/lenguaje-batch
http://foro.elhacker.net/scripting/programacion_batch_avanzada_nuevo-t132924.0.html
http://www.taringa.net/posts/linux/9566772/Scripts-BATCHs.html

De Python solo sé que se trata del lenguaje de moda. Pero creo que es un lenguaje de alto nivel, compilado, imagino que orientado a objetos y todo eso. Creo que todos estos lenguajes (C, C++, C#, Pascal, Java, Python, etc.) tienen un ámbito de aplicación distinto de los que, como el BAT, utilizan directamente los comandos de la shell, sea el sistema operativo Linux/Unix o MSDOS/Windows. Si te vas a meter a fondo en este último campo creo que sería recomendable que empezaras a trabajar en PowerShell, una shell de Windows mucho más potente y moderna que la CMD/MSDOS. Está integrada en Windows desde hace tiempo, está orientada a objetos, y es muy potente. Yo solo he hecho algunos pinitos con ella, justamente cuando no consigo resolver algún problema dentro de un BAT clásico.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas