Bat para quitar ceros de una linea en un txt

Solicito de su apoyo para genera un BAT que haga:

De este texto quitar los ceros que estén entre los pipes:

[H5]|0|0|0|0|0|0|0|0|0|0|0|0|0||||||||||||

QUEDANDO ASÍ:

[H5]|||||||||||||||||||||||||

Son muchas lineas con mas datos que llevan ceros y el archivo es muy grande pero quiero que cuando haya un cero entre los pipes se quite el cero y queden solo los pipes.

problema: |0|

correcto:||

Correo personal [email protected]

3 respuestas

Respuesta
1

Con la nueva forma de trabajo de Todoexpertos he tenido noticia de esta consulta. Veo que ha pasado bastante tiempo y es muy probable que ya hayas resuelto el problema o que haya dejado de interesarte. Si no es así dímelo y podría intentar buscar una solución.

Aunque he escrito al autor de la consutla a la dirección de correo personal sin obtener respuesta, he decidido poner aquí la solución que he encontrado por si le puede servir a alguien. Es esta

:: Sutitución en el archivo config.txt de la cadena |0| por ||
:: Hay que hacer doble pasada para el caso |0|0|
@echo off
Setlocal EnableDelayedExpansion
del kkk.txt
echo.> temp.txt
for /f "skip=2 tokens=1*" %%x in ('fc /n temp.txt "config.txt" ^| findstr -v "*****"') do (
if "%%y" == "" echo.>> kkk.txt
if not "%%y" == "" (
set linea=%%y
set linea=!linea:^|0^|=^|^|!
set linea=!linea:^|0^|=^|^|!
Echo ! Linea!>> kkk.txt
)
)
copy /y kkk.txt config.txt

Se escribe una copia línea a línea del archivo origen (CONFIG.TXT en este ejemplo) en el archivo temporal (KKK.TXT en este ejemplo), respetando las líneas en blanco (para ello se usa el truco del FOR) reemplazando la combinación |0| por || (hay que "escapar" el carácter especial | para conseguir que funcione). El COPY final reemplaza el archivo original con el temporal.

Finalmente conseguí contactar con el autor de la consulta y hemos estado tratando el asunto directamente. La solución aportada funcionó correctamente aunque hubo que hacer algunos ajustes para adaptarla a las necesidades concretas de Rafa Cortés.

Le he sugerido que cierre la consulta si le parece adecuado.

Respuesta

Aquí esta la respuesta que buscas me he tomado el tiempo de probarlo y funciona perfectamente solo debes reemplazar la parte ARCHIVO QUE USARAS.txt por el nombre de tu archivo

Código:

@Echo OFF & SetLocal EnableDelayedExpansion

(
For /F "UseBackQ Tokens=* Delims=" %%# in (
"ARCHIVO QUE USARAS.txt"
) Do (
Set "str=%%#"
Set "mod=!str:|0|=||!"
Echo.! Mod!
)
)>>"temp.txt"

(
For /F "UseBackQ Tokens=* Delims=" %%# in (
"temp.txt"
) Do (
Set "str=%%#"
Set "mod=!str:|0|=||!"
Echo.! Mod!
)
)>>"NUEVO ARCHIVO.txt"

DEL temp.txt
Exit /B 0

Aunque borraria los espacios es blancos por eso te recomiendo la respuesta de
gggirald funciona exelente solo reemplaza esta parte

Echo ! Linea!>> kkk.txt

Por esta

Echo ! Linea!>> kkk.txt

Si sabes programar seguramente ya lo notaste el signo de admiracion esta separado y no funciona gracias a gggirald por el codigo funciona de marabilla.

Respuesta
-1

Aquí tienes la solución.
Metelo todo en una carpeta, osea el script y el archivo a corregir

@echo off
Setlocal EnableDelayedExpansion
@echo off
for /f %%a in ('dir /b *.*') do (call :camcomtb %%a)
goto :EOF
:camcomtb
for /f "tokens=* delims=" %%i in (%1) do (set c=%%i&echo !c:0=!>> problemaCorregida.txt)
copy /Y problema.txt %1
del problema.txt
goto :EOF

Hola buenas tardes gracias por la respuesta el bat funciona muy bien, pero borra todos los ceros de todo el TXT necesito que solo borre los ceros que estén entre los PIPES.

serán muchos archivos en una misma carpeta y seria muy importante no cambiarle el nombre a los archivos.

También note que al final del txt le deja esto:

@echo off
Setlocal EnableDelayedExpansion
@echo off
for /f %%a in ('dir /b *.*') do (call :camcomtb %%a)
goto :EOF
:camcomtb
for /f "tokens=* delims=" %%i in (%1) do (set c=%%i&echo :camcomtb>> problemaCorregida.txt)
copy /Y problema.txt %1
del problema.txt
goto :EOF

Eso seria incorrecto

Gracias por su apoyo quedo en espera de su respuesta gracias.

Cópiame alguna parte de datos para ver que es lo que quieres, yo solo veo los ceros entre barras..

Hola Buenas tardes gracias por la Respuesta, este es un ejemplo, se dará cuenta de que lleva muchos ceros en todo el txt pero solo requiero quitar los ceros que estén entre dos pipes ejemplo: |0| , son varios archivos txt, en una misma carpeta, no necesito crear copias de los txt requiero editar solo el txt original y no dejar el código hasta abajo del txt,
Quedo en espera de su respuesta Gracias

Me podría facilitar un correo para enviarle adjunto el ejemplo por favor.

Saludos

@echo off
Setlocal EnableDelayedExpansion
@echo off
for /f %%a in ('dir /b *.*') do (call :camcomtb %%a)
goto :EOF
:camcomtb
for /f "tokens=* delims=" %%i in (%1) do (set c=%%i&echo !c:0=!>> problemacorregida.txt)
copy /Y prob.txt %1
del prob.txt
goto :EOF

has una prueba:
Crea una carpeta nueva, métele un script con el código que te acabo de crear, y un archivo txt llámale problema.txt con estos datos: [H5]|0|0|0|0|0|0|0|0|0|0|0|0|0||||||||||||.

Te creara otro txt con el nombre problemacorregida.txt.

Mejor hablamos por aquí así la gente ve las soluciones..

Hola, buenos días, el código borra todos los ceros, pero mi necesidad es que no borre todos los ceros como tal, ejemplo:

|0.00| --> no tocar

|2014| --> no tocar

|$10200.00| --> no tocar

|0| --> si editar quedaría así --> ||

Que solo borre los ceros que estén entre dos pipes ejemplo:

|0| --> NO

|| --> SI

Tengo muchos archivos .txt con diferentes nombres en una misma carpeta necesito que el .bat solo borre los ceros que estén entre dos pipes de todos los archivos el cambio seria sobre el .txt original sin cambiarle el nombre y sin crear copias de este txt y sin dejarle el código hasta abajo del txt.

nota: no puedo poner el txt adjunto para explicarle a detalle.

Quedo en espera de su respuesta gracias.

La única solución que no se que si te puede ayudar es borrarte el 0 y lo que viene detrás

osea borrar 0|

y quedaría así

Borrar |0|0|0|0|0|0|0|0|0|||||||

quedaría así |||||||

se borrara todo esto 0|0|0|0|0|0|0|0|0| es decir el 0 y lo que viene detrás (|).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas