Título: Cambiar separador de campo Publicado por: morsas en 17 Septiembre 2013, 19:55 pm Hola tengo un archivo de texto cuyo delimitador de columnas es un espacio y necesito cambiarlo por una coma o barra vertical, es posible realizar esto? muestro el archivo como esta ahora:
05052013 20:10 12345 12310 12345678 00:00:24 5 05222013 10:15 12346 12311 5512345690 00:00:20 5 5800 y cómo necesito que quede: 05052013,20:10,12345,12310,12345678 ,00:00:24,5, 05222013,10:15,12346,12311,5512345690 ,00:00:20,5,5800 La columna mas "ancha" es de 20 caractéres Saludos y muchas gracias de antemano. Título: Re: Cambiar separador de campo Publicado por: Almapa en 17 Septiembre 2013, 22:56 pm Aunque no has determinado que lenguaje de scripting quieres programarlo en batch seria algo así:
Código: @echo off set /p documento1= Setlocal EnableDelayedExpansion for /f "tokens=*" %%a in ('type %documento1%') do (set var=%%a && (for %%g in (%%a) do (set var=!var: %%g=,%%g!)) && echo !var!>>documento2.txt) Donde el documento1 es donde está lo que quieres cambiar y documento2.txt el documento de salida. Como verás está hecho para que lo cambie por una "," no por un "|". Un saludo! Título: Re: Cambiar separador de campo Publicado por: morsas en 18 Septiembre 2013, 05:47 am Una disculpa, el programa lo voy a realizar en DOS, ya lo corrí y no funciona, aparece la ventana de dos pero se queda estatica, sin ninguna leyenda.
Título: Re: Cambiar separador de campo Publicado por: Almapa en 18 Septiembre 2013, 07:24 am Mira a ver si así te sirve, a mi me funciona bien. Para introducir el archivo arrástralo sobre la ventana de la consola.
Código: @echo off Setlocal EnableDelayedExpansion set /p documento1="Introduzca la ruta del archivo: " call :ruta documento1 for /f "tokens=*" %%a in ('type %documento1%') do (set var=%%a && (for %%g in (%%a) do (set var=!var: %%g=,%%g!)) && echo !var!>>!documento2!) echo Finalizado, el archivo modificado está en !documento2! pause exit :ruta set documento2=%~d1%~p1%~n1_modificado.txt Título: Re: Cambiar separador de campo Publicado por: Eleкtro en 18 Septiembre 2013, 12:04 pm Te aconsejo que utilices un lenguaje con soporte para reemplazar mediante expresiones regulares (es decir, cualquier otro lenguaje menos Batch).
Código: (\s{1})[^.] Puedes utilizar el subgrupo 1 de ese RegEx. Saludos! Título: Re: Cambiar separador de campo Publicado por: morsas en 19 Septiembre 2013, 17:36 pm Es correcto Almapa, ya funciona pero quedó un detalle, no pone la coma que debe ir al final de la primera linea:
05052013,20:10,12345,12310,12345678 ,00:00:24,5 05222013,10:15,12346,12311,5512345690 ,00:00:20,5,5800 05282013,10:10,12347,12312,5512345691 ,00:00:25,5,5700 crees que tenga solucion? ;-) Título: Re: Cambiar separador de campo Publicado por: Almapa en 20 Septiembre 2013, 11:27 am No se si habrás aprendido mucho con esto pero bueno, espero que por lo menos sepas que hace cada línea de código o de lo contrario te informes.
Código: @echo off Setlocal EnableDelayedExpansion set linea=0 set /p documento1="Introduzca la ruta del archivo: " call :ruta %documento1% for /f "tokens=*" %%a in ('type %documento1%') do ((set var=%%a) && set /a linea=!linea!+1 && (for %%g in (%%a) do (set var=!var: %%g=,%%g!)) && (if !linea!==1 (set var=!var!,)) && echo !var!>>!documento2!) echo Finalizado, el archivo modificado está en !documento2! pause exit :ruta set documento2=%~d1%~p1%~n1_modificado.txt Un saludo. |