Cortar cadena de archivo plano con más de 100 líneas de texto con un .bat

Tengo un archivo plano con más de 100 líneas de texto y me gustaría cortar su largo, ya que cada línea es de largo 220 en los cuales 100 son solo espacios en blanco.

¿Cómo puedo hacer un .bat para que haga ese proceso de limpieza del archivo?

Respuesta
1

No me queda claro si quieres eliminar de cada línea todos los espacios en blanco, estén en la posición en la que estén, cosa que me resulta un poco sorprendente. Si fuera así esto podría valer:

@echo off
Setlocal EnableDelayedExpansion
del /q salida.txt
for /f "tokens=*" %%a in (entrada.txt) do (
set linea=%%a
echo !linea: =!>>salida.txt
)

El archivo ENTRADA.TXT sería el original y SALIDA.TXT sería el corregido

Maestro, gracias por su respuesta, funciona perfecto borrando todos lo espacios, el problema es que mi texto tiene espacios entre textos, ya que al llenar el nombre completo por ejemplo, tiene que cumplir un largo de 50 rellenando con espacios a la derecha, después lo seguiría la dirección, etc.

Tal vez me expliqué mal, me gustaría hacer algo así como un substring desde la posición 0 a la 120 y borrar los espacios desde la posición 121 hasta el fin de las líneas, donde en el ejemplo los guiones bajos (_) son espacios vacíos y el fin sería hasta el DDMMYYYY que sería la posición 120.

Ejemplo ENTRADA.TXT:

Línea 1: 0000460020181005__________________________________________________________

Línea 2: 00154447345_26__Nombre_ApellidoP_ApellidoM_____Direccion_____DDMMYYYY_____

Línea 3: 00154447345_27__Nombre_ApellidoP_ApellidoM_____Direccion_____DDMMYYYY_____

Línea 4: 00158887372_18__Nombre_ApellidoP_ApellidoM_____Direccion_____DDMMYYYY_____

Línea 5: 00158887372_19__Nombre_ApellidoP_ApellidoM_____Direccion_____DDMMYYYY_____

Línea 6: etc.

Por eso decía que me resultaba un poco sorprendente lo de borrar todos los espacios. Mira a ver si esto se ajusta a tus necesidades:

@echo off
Setlocal EnableDelayedExpansion
del /q salida.txt
for /f "tokens=*" %%a in (entrada.txt) do (
set linea=%%a
set del=!linea:~0,120!
set fin=!linea:~121!
Echo ! Del! Fin!>>salida.txt
)

Aunque acabo de darme cuenta de que si los espacios que quieres borrar son espacios finales este bat más sencillo creo que será igual de efectivo (y más rápido):

@echo off
Setlocal EnableDelayedExpansion
del /q salida.txt
for /f "tokens=*" %%a in (entrada.txt) do (
set linea=%%a
echo !linea!>>salida.txt
)

Olvida las dos soluciones anteriores. Estaba trabajando con un archivo mal generado y por eso resultaba tan sencillo. Este creo que sí que funciona:

@echo off
Setlocal EnableDelayedExpansion
del /q salida.txt
for /f "tokens=*" %%a in (entrada.txt) do (
set linea=%%a
set del=!linea:~0,120!
set fin=!linea:~121!
echo !del!!fin: =!>>salida.txt
)

Pero si alguna línea tiene menos de 121 caracteres (incluidos los espacios) puede aparecer un "=" como carácter final de la línea. En tu ejemplo las líneas son aproximadamente de 70-75 caracteres significativos y el bat anterior respeta los 120 primeros caracteres aunque sean espacios.

¡Gracias Maestro, Funcionó a la perfección! 

De verdad le agradezco, ya que había dado vuelta la web buscando ejemplos de eso y nada, y si, como usted dijo, al haber una línea con menos largo que lo indicado aparece un =, habrá alguna forma de que no pase eso???, de todas formas mi consulta quedó resuelta, se agradece la ayuda!!

Para evitar lo del "=" creo que esto funcionará:

@echo off
Setlocal EnableDelayedExpansion
del /q salida.txt
for /f "tokens=*" %%a in (entrada.txt) do (
set linea=%%a
set del=!linea:~0,120!
set fin=!linea:~121!
if not #!fin!#==## set fin=!fin: =!
Echo ! Del! Fin!>>salida.txt
)

¡Ojo! El p... editor de la página ha alterado gravemente la última instrucción del bat (suele ocurrir porque le aplica criterios de texto normal). Si lo pongo a mano seguro que hace lo mismo pero probaré. Debería ser:

Echo ! Del! Fin!>>salida.txt

Por si acaso, sería como la última de la versión anterior pero eliminando lo que va entre los ":" y la "!" final.

Tal como me temía lo ha vuelto a hacer. Pondré una "foto":

Pero la "foto" tiene el inconveniente de que no se puede copiar el texto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas