Leer solo una parte de un fichero de texto, ¿como?

Iniciado por yeahhh, 9 Junio 2010, 15:25 PM

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

yeahhh

Hola, me presento en este foro con una pregunta.
He estado mirando manuales de batch pero no encuentro como hacer lo que busco, me explico.
Necesito hacer un .bat el cual lee un fichero de texto, que contiene 6 lineas de texto, de las cuales solo me interesa 1 de ellas, y de esa linea que me interesa, necesito recortarla.
Me explico, el fichero de texto tendría esto:

l \CheckWMI.cpp(323) |----------------+
l \CheckWMI.cpp(324) | CurrentVoltage |
l \CheckWMI.cpp(325) |----------------+
l \CheckWMI.cpp(334) |             14 |
l \CheckWMI.cpp(336) |----------------+

A mi me interesa la linea 4, pero borrando los xx primeros caracteres para quedarme solo con el valor númerico de la linea, y evidentemente también borrando el final, solo capturar el número.

Luego ese número lo almacenaría en una variable, que pasaría con un "echo" que es lo que necesito.

Como puedo hacer esto?

Gracias.

P.D: El fichero txt lo genero llamando a un .exe y redirigiendo con > hacia el fichero.

leogtz

A ver, supongamos que tenemos esto:


C:\>type file.txt
l \CheckWMI.cpp(323) |----------------+
l \CheckWMI.cpp(324) | CurrentVoltage |
l \CheckWMI.cpp(325) |----------------+
l \CheckWMI.cpp(334) |             14 |
l \CheckWMI.cpp(336) |----------------+

C:\>


Si solo quiero el número que está entre parentesis de la cuarta linea:


C:\>type file.txt
l \CheckWMI.cpp(323) |----------------+
l \CheckWMI.cpp(324) | CurrentVoltage |
l \CheckWMI.cpp(325) |----------------+
l \CheckWMI.cpp(334) |             14 |
l \CheckWMI.cpp(336) |----------------+

C:\>code.bat
Numero : 334


C:\>

Código (dos) [Seleccionar]

@echo off
(
echo 4, 4l
echo e
echo e
) | edlin file.txt | findstr /v /i "^Final" | findstr /v /i "^\*4.*" | findstr /v /i "^\*e.*$" > "temp.txt"
for /f "tokens=2 delims=()" %%a in (temp.txt) do (
echo Numero : %%a
)
set /p "="
exit /b 0
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

yeahhh

Gracias por la respuesta!!!
Realmente no quería esa cifra, quiero la cifra suelta que hay en esa misma linea (el 14), pero revisando el código averigüare como llegar a coger solo esa cifra.

Gracias de nuevo.

leogtz

Código (dos) [Seleccionar]
@echo off
(
echo 4, 4l
echo e
echo e
) | edlin file.txt | findstr /v /i "^Final" | findstr /v /i "^\*4.*" | findstr /v /i "^\*e.*$" > "temp.txt"
for /f "tokens=2 delims=||" %%a in (temp.txt) do (
set "numero=%%a"
)
set "numero=%numero: =%"
echo Numero : %numero%
exit /b 0



C:\>type FILE.TXT
l \CheckWMI.cpp(323) |----------------+
l \CheckWMI.cpp(324) | CurrentVoltage |
l \CheckWMI.cpp(325) |----------------+
l \CheckWMI.cpp(334) |             14 |
l \CheckWMI.cpp(336) |----------------+

C:\>code.bat
Numero : 14

C:\>
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com