Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: galmito en 27 Enero 2011, 16:16 pm



Título: [Duda] Extraer determinada linea de archivo
Publicado por: galmito en 27 Enero 2011, 16:16 pm
Hola, mi duda es la siguiente:

¿Cómo extraer determinada linea de un archivo .txt (Da igual el formato)?
Creo que tiene que ser con una mezcla de For /F, tokens, y skip, pero no me sale  :-\

Por ejemplo, quiero extraer la linea 32 de un archivo, ¿Cómo hago?
Gracias

EDITO:
Por ejemplo tengo esto:

Código:
Hola esto es
una prueba
de extracción. xD

Y quiero sacar la linea 2 por ejemplo, para que quede asi:

Código:
una prueba

Espero haber aclarado.


Título: Re: [Duda] Extraer determinada linea de archivo
Publicado por: SuperDraco en 27 Enero 2011, 16:27 pm
a ver, en tu idioma que significa "extraer"? con una herramienta que se llama "SED.exe" es muy manejable y puedes hacer lo que dices (supongo) y mas cosas pero ya no recuerdo como usarla bien tendria que mirarlo y aora no tengo timpo, saludos


Título: Re: [Duda] Extraer determinada linea de archivo
Publicado por: galmito en 27 Enero 2011, 16:30 pm
Decía para hacerlo sin otro programa externo.  :-\


Título: Re: [Duda] Extraer determinada linea de archivo
Publicado por: xassiz~ en 27 Enero 2011, 16:42 pm
Código
  1. @echo off
  2.  
  3. set/a n_line=%1-1
  4. if %n_line% LSS 0 (exit /b -1)
  5. if %n_line% EQU 0 (call:show) else (call:show " skip=%n_line%")
  6. exit /b 0
  7.  
  8. :show
  9. for /f "tokens=*%~1" %%%% in (file.txt) do (
  10.    echo.%%~%%
  11.    goto:eof
  12. )
  13.  

Ejemplo:
Código:
C:\Users\Pablo\Desktop> script 2
una prueba

C:\Users\Pablo\Desktop>


Título: Re: [Duda] Extraer determinada linea de archivo
Publicado por: galmito en 27 Enero 2011, 16:43 pm
Gracias ya lo solucione así:
Código:
set /p skipes=Ingrese linea: 
if %skipes%==0 FOR /F "tokens=*" %%A IN (mapa1.bat) DO (
set "var=%%A"&goto fin)
FOR /F "tokens=* skip=%skipes%" %%A IN (mapa1.bat) DO (
set "var=%%A"&goto fin)

:fin
pause>nul


Título: Re: [Duda] Extraer determinada linea de archivo
Publicado por: xassiz~ en 27 Enero 2011, 16:45 pm
De nada.

Por cierto, es mala costumbre poner varias órdenes en la misma línea con &, y es buena costumbre identar el código. :P


Título: Re: [Duda] Extraer determinada linea de archivo
Publicado por: leogtz en 27 Enero 2011, 19:21 pm
Hay una manera mucho más "sencilla":
Código
  1. @echo off
  2. for /f "tokens=2 delims=:" %%_ in ('
  3. ^(
  4. echo 2^,2l
  5. echo e
  6. ^) ^| edlin /b FILEIN.TXT
  7. ') do (echo %%_)

El problema sería el delimitador, pero en fin, si no tienes problemas con el formato de texto, puedes usar esta manera.


Título: Re: [Duda] Extraer determinada linea de archivo
Publicado por: xassiz~ en 27 Enero 2011, 20:13 pm
Está interesante tu solución Leo, pero en Windows 7 no tengo edlin :P


Título: Re: [Duda] Extraer determinada linea de archivo
Publicado por: leogtz en 27 Enero 2011, 20:24 pm
Está interesante tu solución Leo, pero en Windows 7 no tengo edlin :P

Mmmm, no sabía que lo habían quitado. Mmmmmm. Supongo que se habrán declinado ya por el uso de powershell.

En powershell se podría hacer algo así:

Código
  1. $line = (Get-Content Test.txt)[1]


Título: Re: [Duda] Extraer determinada linea de archivo
Publicado por: xassiz~ en 27 Enero 2011, 22:16 pm
Sí, podría quedar así el script:
Código
  1. $numero_linea = [Console]::In.ReadLine(); #Input
  2.  
  3. $numero_linea-=1;
  4. $line = (Get-Content file.txt)[$numero_linea]
  5. echo $line
  6.  


Título: Re: [Duda] Extraer determinada linea de archivo
Publicado por: galmito en 31 Enero 2011, 03:45 am
Gracias, igual prefiero mi solución compleja. Y seguiré usando los "&", no me molestan para nada. Gracias igual ^^


Título: Re: [Duda] Extraer determinada linea de archivo
Publicado por: leogtz en 31 Enero 2011, 07:58 am
Gracias, igual prefiero mi solución compleja. Y seguiré usando los "&", no me molestan para nada. Gracias igual ^^

Okay, sigue haciendo mal hábito.