Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: fabianjanu en 10 Septiembre 2012, 19:58 pm



Título: Bat leer palabras texto
Publicado por: fabianjanu en 10 Septiembre 2012, 19:58 pm
buenos dias, soy nuevo en el mundo del bat y estoy necesitando de un bat que leea un texto "Ejemplo.txt" y me devuelva en otro texto "encontrado.txt" las lineas que contengan ciertas palabras. pero tambien las ultimas 5 lineas a esta linea inclusive.

ejemplo:


Nombre: Pepe
Edad: 32
Altura: 1.8
Peso: 75


Nombre: Jose
Edad: 20
Altura: 1.9
Peso: 75

Nombre: Juan
Edad: 340
Altura: 1.7
Peso: 85



aca deberia devolver todos las personas que tengan 75 KG.

al momento pude hacer que devuelva: "Peso:75" con :

type log.txt | find /i "Peso: 75"

pero necesito tambien las 3 lineas anteriores al peso para saber los demas datos.

es posible?



Título: Re: Bat leer palabras texto
Publicado por: Eleкtro en 11 Septiembre 2012, 16:59 pm
Trabajar con números no es una taréa agradable en Batch (No por dificil, sino por primitivo e ineficaz si no se hace al detalle... Bueno, eso lo hace más dificil supongo xD)... el code que he echo creo que ha quedado eficiente y sin errores, pero habría sido mejor codearlo en un lenguaje decente.

Código
  1. @Echo OFF
  2.  
  3.  
  4. REM               [PARÁMETROS]
  5. REM                KG ARCHIVO
  6. Call :ElHacker.net 75 test.txt
  7.  
  8.  
  9. :ElHacker.net
  10. Setlocal enabledelayedexpansion
  11.  
  12. REM Eliminamos las lineas en blanco del archivo...
  13. Type "%~2" | FINDSTR /I "[a-z]" > "%TEMP%\%~2"
  14.  
  15. Echo: [ Peso: %~1 ] - Resultados: | MORE
  16. ECHO:________________________________________________________________________________
  17. For /F "Delims=:" %%X in ('findstr /I /N "Peso..%~1" "%TEMP%\%~2"') do (
  18. Title Peso: %~1
  19. Set /A "LINE=0"
  20. Set /A "LAST=%%X+1"
  21. Set /A "FIRST=!LAST!-4"
  22. FOR /F "Tokens=*" %%# in ('Type "%~2"') do (
  23. Set /A "LINE+=1"
  24. IF NOT "!LINE!" EQU "!LAST!" (
  25. IF "!LINE!" EQU "!FIRST!" (
  26. Set /A FIRST+=1
  27. ECHO %%#
  28. )
  29. )
  30. )
  31. ECHO:________________________________________________________________________________
  32. )
  33. Setlocal disabledelayedexpansion
  34. Goto :EOF

Test.txt

Código:
Nombre: Pepe
Edad: 32
Altura: 1.8
Peso: 75

Nombre: paco
Edad: 11
Altura: 2,9
Peso: 95+

Nombre: cheguevara
Edad: 99
Altura: 7,9
Peso: 95
Nombre: chrisss
Edad: 1000
Altura: 2,19
Peso: 75

Output:
(http://img502.imageshack.us/img502/35/prtscrcapturec.jpg)


Saludos