Cambiar separador de campo

Iniciado por morsas, 17 Septiembre 2013, 19:55 PM

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

morsas

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.

Almapa

Aunque no has determinado que lenguaje de scripting quieres programarlo en batch seria algo así:

@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!

morsas

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.

Almapa

Mira a ver si así te sirve, a mi me funciona bien. Para introducir el archivo arrástralo sobre la ventana de la consola.

@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

Eleкtro

Te aconsejo que utilices un lenguaje con soporte para reemplazar mediante expresiones regulares (es decir, cualquier otro lenguaje menos Batch).

(\s{1})[^.]

Puedes utilizar el subgrupo 1 de ese RegEx.

Saludos!








morsas

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?

;-)

Almapa

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.

@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.