Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: flony en 20 Octubre 2009, 15:11 pm



Título: ubicar linea en txt conociendo palabra [batch] (SOLUCIONADO)
Publicado por: flony en 20 Octubre 2009, 15:11 pm
no se si se puede...pero se puede saber en que linea esta una palabra en un txt sabiendo que palabra es ?
ejm
Citar
hola como estas me llamo
flony y y hoy por la noche salgo
y quiero sabr si salis vos
ae que flony esta en la segunda linea


Título: Re: ubicar linea en txt conociendo palabra [batch]
Publicado por: Mr. Crowley en 20 Octubre 2009, 15:18 pm
OK, creo que esto no se puede hacer con una sola funcion; para averiguar la linea en la que se encuentra:

1. Abra el archivo y recorralo linea por linea (llevando un contador de la linea procesada, logicamente)
2. "Pregunte" en cada linea si se encuentra la palabra (eso lo hace con la funcion InStr())

Si encuentra la linea, entonces detiene la escritura y cierra el archivo. Listo... facil  :xD


Título: Re: ubicar linea en txt conociendo palabra [batch]
Publicado por: FranciskoAsdf en 20 Octubre 2009, 15:29 pm
yo necesito lo mismo pero en batch u.u alguien sabe como se puede hacer >.<?


de ante mano muchas gracias :)


Título: Re: ubicar linea en txt conociendo palabra [batch]
Publicado por: leogtz en 20 Octubre 2009, 16:28 pm
Código:
type "file.txt" | find /n /i "flony"

O juega con findstr /n.

Saludos.


Título: Re: ubicar linea en txt conociendo palabra [batch]
Publicado por: <ИΘZIЭ(ŦB> en 20 Octubre 2009, 23:30 pm
Buenas... Sé que hay muchas maneras sencillas de hacer lo que piden, pero aquí te dejo un .bat que te servirá para eso. Espero les sea útil.

Código
  1. @echo off
  2. :Main
  3. cls
  4. set /p file=Indique el nombre del archivo:
  5. set /p string=Indique la palabra a buscar:
  6. setlocal enabledelayedexpansion
  7. set /a nchar=0
  8. call:Contar
  9. set /a nlin=0
  10. For /f "useback tokens=*" %%F in ("%file%") do (
  11.     set /a nlin+=1
  12.     set "line=%%F"
  13.     set /a xcont=0
  14.     call:Comparar
  15. )
  16. echo. & echo Terminado. & pause>nul & goto Main
  17.  
  18. :Contar
  19. If /i "!string:~% style="color: #448888;">nchar%,1!" == "" goto:eof
  20. set /a nchar+=1
  21. goto Contar
  22.  
  23. :Comparar
  24. If /i "!line:~% style="color: #448888;">xcont%,%nchar%!" == "% style="color: #448888;">string%" (
  25.     set mtch=T
  26.     call:Msj
  27. )
  28. If /i "!line:~% style="color: #448888;">xcont%,%nchar%!" == "" (
  29.     set mtch=F
  30.     call:Msj
  31.     goto:eof
  32. )
  33. set /a xcont+=1
  34. goto Comparar
  35.  
  36. :Msj
  37. If "%mtch%" == "T" (
  38.     echo PALABRA ENCONTRADA: [LINEA %nlin%] %line% & echo.
  39.     call:Choice
  40. )
  41. If "%mtch%" == "F" echo LINEA %nlin%: %line%
  42. goto:eof
  43.  
  44. :Choice
  45. set /p ch=¨Continuar la b£squeda (S/N)?:
  46. If not defined ch goto Choice
  47. If /i %ch% == s goto:eof
  48. If /i %ch% == n goto Main
  49. goto:eof
  50.  


Título: Re: ubicar linea en txt conociendo palabra [batch]
Publicado por: flony en 21 Octubre 2009, 14:01 pm
cyman sos un capo  ;-)  probe el bat y es exactamente lo que estaba buscando  ;D mil gracias...o sea esta resuelto...mil gracias a todos...jijiji me lo pongo a traducir al  codigo del bat
Lo estuve leyendo y esto es lo que no entiendo si me lo pueden explicar seria genial para entender xq y como lo hizo
Citar
set "line=%%F"
Citar
"!string:~%nchar%,1!"


Título: Re: ubicar linea en txt conociendo palabra [batch]
Publicado por: <ИΘZIЭ(ŦB> en 21 Octubre 2009, 21:47 pm
Qué bueno que te sirviera! Puedo decirte que lo que sé de Batch lo he aprendido solo aquí en el foro y en tan solo unos meses gracias a la ayuda de los compañeros y moderadores que de verdad están dispuestos a ayudar. De modo que me uno a ti en el agradecimiento.

Lo de tus preguntas es muy sencillo.

En primer lugar:
Código:
set "line=%%F"

Si te fijas bien, lo que hago en esta línea es crear la variable line con el valor de la variable del FOR (%%F), pues esta última se encarga de extraer el texto de cada línea del archivo que indicaste. Por eso le di el nombre "line" (línea) a esa variable.
Código:
For /f "useback tokens=*" %%F in ("%file%") do (
...
set "line=%%F"
...
)

Tu segunda duda:
Código:
"!string:~%nchar%,1!"

Bueno, esta línea la uso en la etiqueta :Contar para saber cuántos caracteres (nchar) tiene la palabra que indicaste (string) para buscar en el archivo de texto (file). Si te fijas, esta etiqueta lo que hace es ir sumando nchar hasta que llega al último caracter. Déjame darte algunos ejemplos:

Si tengo la variable "VAR=Hola mundo" y quiero mostrar su valor, solo debo usar un echo:
Código:
echo Valor de VAR: "%VAR%"
Se mostraría esto:
Código:
Valor de VAR: "Hola mundo"

Ahora, si no quiero ver todo su contenido sino una fracción, por ejemplo, los primeros tres caracteres, haría lo siguiente:
Código:
echo Valor fraccionado de VAR: "%VAR:~0,3%"
El primer número indica la posición (0) y el segundo (3) los caracteres que se mostrarán desde esa posición. Así pues, el resultado de esto sería:
Código:
Valor fraccionado de VAR: "Hol"

Bueno, no sé si ya conocías ese detalle, pero por si acaso lo expliqué.

Ahora bien, debes haber notado que en mi código original hay algunas diferencias, particularmente respecto a los dos signos de admiración (!) que usé. Esto se debe a que necesitaba usar una variable para determinar la posición, en vez de indicarla directamente con un número. No funcionaría de hacerlo de este modo:
Código:
%string:~%nchar%,1%
Ahora bien, debo mencionar que para que puedan usarse estos signos (!) en vez de los porcentajes (%) hay que escribir la línea:
Código:
setlocal enabledelayedexpansion
que si ves, usé al principio antes de llamar a la etiqueta :Contar. Eso lo aprendí hace poco, aunque debo confesar que no entiendo bien por qué es necesario. He leído que tiene que ver con unas tales variables retardadas, pero hasta ahí.

Creo que esto abarca lo de tus dudas, y tal vez más... Jaja! Espero que por lo menos hayas quedado claro.


Título: Re: ubicar linea en txt conociendo palabra [batch] (solucionado)
Publicado por: flony en 22 Octubre 2009, 03:26 am
muy bien explicado  ::)....eso es tener ganas de enseñar  ;-) ...gracias men...es mas me diste un ejemplo practico de para que sirve la polimetria...q apenas entiendo bien
este bue problema solucionado