Nuevas NORMAS para el foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Julio 24, 2008, 08:49:36
Boton Buscar
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Batch (Moderadores: Espectro Infernal, The Shadow)  |  Tema: COMO ESCOGER UNA LINEA DE OTRO TEXTO? 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: COMO ESCOGER UNA LINEA DE OTRO TEXTO?  (Leído 285 veces)
nikecito
Habitual
*****
Desconectado Desconectado

Mensajes: 395


Nikecito :: La maldad es buena >=)

nikecito@hotmail.com
Ver Perfil WWW
« en: Mayo 02, 2008, 02:51:40 »

bueno mi pregunta es simple digamos q tengo este bat
 @echo off
echo hola
echo como estas
echo MOSTRAR LA LINEA 4 DEL ARCHIVO C:\hola.txt
echo eso es todo


ahora el archivo C:\hola.txt tiene este contenido:

platano
manzana
mandarina
uva
pera
frutilla


y la cuestion es q no se como hacer para q en el bat 1 se muestre la linea 4 del otro archivo estava viendo aldo de call pero creo q no es la respuesta :S  ase tiempo vi alguito sobre eso pero no es lo q busco ademas me estoy oxidando Tongue
espero q me puedan ayudar =) 
En línea



1101110  1101001  1101011  1100101  1111000  1101001  1110100  1101111
ECDundy
Habitual
*****
Desconectado Desconectado

Mensajes: 164


throw new exception(":)");

erick_cartman_ok
Ver Perfil WWW Email
« Respuesta #1 en: Mayo 03, 2008, 11:56:41 »

trabajando con  "FOR /F" puedes hacerlo
Por cierto yo tambien tengo una duda. Aprovechando el ejemplo de nuestro amigo. Como puedo hacer para guardar en una variable la palabra uva en la cuarta linea del texto?
En línea

plof
Miembro
*****
Desconectado Desconectado

Mensajes: 73



Ver Perfil Email
« Respuesta #2 en: Mayo 04, 2008, 09:26:32 »

Buenas:
Respondiendo a los dos, un programa que pide como entradas el número de linea y la ruta del texto, devolviendo el contenido de toda esa linea entera.

@echo off&call:main %*&goto:EOF
:linea_texto
    set /A n=%2
    FOR /F "tokens=*" %%i IN (%1) DO (call:aux_for %%i)
goto:EOF

:aux_for
    set /A n-=1
    if %n% EQU 0 (set res=%1)
goto:EOF

:main
    set /p linea=Inserte la linea de texto^>
    set /p texto=Inserte ruta del txt^>

    call:linea_texto %texto% %linea%

    echo La linea %linea% en %texto%:
    echo %res%
    pause
goto:EOF

Lo malo es que recorrería todo el texto hasta %linea%, aun habiendo obtenido la linea que se pedía.
Además, si es un texto vacío y pedimos la linea 100 por ejemplo, el bucle realizaría 100 iteraciones antes de salir.
Solución: Poder detectar el fin de fichero con batch (yo no tengo ni idea)
 
Un saludo.
En línea
ECDundy
Habitual
*****
Desconectado Desconectado

Mensajes: 164


throw new exception(":)");

erick_cartman_ok
Ver Perfil WWW Email
« Respuesta #3 en: Mayo 04, 2008, 02:03:17 »

Si, no es muy practico tu codigo. Pero lo aprovechare pues me gustaria acabar de llevarme una idea firme de lo que es el:
Código:
@echo off&call:main %*&goto:EOF

en tu codigo como parte explicativa. En especial como funciona el goto:EOF, que estas haciendo realmente? y que posibilidades brinda hacer goto:EOF?
En línea

:: SmartGenius™ :: ツ
Moderación
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1624


Hello there...you was Bluejacked ¡¡...xD

smartgenius@el-hacker.org
Ver Perfil WWW
« Respuesta #4 en: Mayo 04, 2008, 03:09:53 »

Si, no es muy practico tu codigo. Pero lo aprovechare pues me gustaria acabar de llevarme una idea firme de lo que es el:
Código:
 @echo off&call:main %*&goto:EOF

en tu codigo como parte explicativa. En especial como funciona el goto:EOF, que estas haciendo realmente? y que posibilidades brinda hacer goto:EOF?


yo tambien estaria interesado en saber a ciencia cierta como funciona esto, ya que creo que va ligado con el call, y lo he visto mucho en las funciones que ha posteado The Shadow...

Saludos.
En línea

Sh4k4
Colaborador
*****
Desconectado Desconectado

Mensajes: 557


SHAKA


Ver Perfil WWW
« Respuesta #5 en: Mayo 04, 2008, 04:56:38 »

se pegan los comandos iniciales y se corren no es gran ciencia...the shadow haznos el honor..
En línea

Arayashiki
plof
Miembro
*****
Desconectado Desconectado

Mensajes: 73



Ver Perfil Email
« Respuesta #6 en: Mayo 04, 2008, 06:21:50 »

se pegan los comandos iniciales y se corren no es gran ciencia...the shadow haznos el honor..
Exactamente, no tiene ningún misterio. Me gusta hacerlo así porque me organizo mejor (le da un aire al c++).
No entiendo muy bien eso de que el code no es práctico. Si te viene mejor no hagas esa estructura tipo main o utiliza variables de expansión si lo ves más claro. Lo que no consigo es acceder directamente a esa linea x del documento directamente (sin pasar por las lineas anteriores y optimizando iteraciones en el bucle). Seguro que se puede hacer más simple xdxXd a ver si alguien nos da una idea...
Un saludo.
En línea
:: SmartGenius™ :: ツ
Moderación
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1624


Hello there...you was Bluejacked ¡¡...xD

smartgenius@el-hacker.org
Ver Perfil WWW
« Respuesta #7 en: Mayo 04, 2008, 06:43:31 »

bueno creo que he entendido el funcionamiento del :eof (bueno, eso creo)

es para retornar a la linea siguiente de un call

yo llamo una funcion con el call, luego cuando esta termine vuelve y ejecuta la linea que le sigue al call...

si no es asi entonces terco terco

la voy a poner en un code que toy haciendo ahora...

Saludos.
En línea

ECDundy
Habitual
*****
Desconectado Desconectado

Mensajes: 164


throw new exception(":)");

erick_cartman_ok
Ver Perfil WWW Email
« Respuesta #8 en: Mayo 04, 2008, 10:26:35 »

plof no es practico por lo mismo que expresabas.  Smart EOF aun no esta explicado. Aunque lo que dices tiene sentido. Seria interesante que alguien mas explicara.
En línea

:: SmartGenius™ :: ツ
Moderación
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1624


Hello there...you was Bluejacked ¡¡...xD

smartgenius@el-hacker.org
Ver Perfil WWW
« Respuesta #9 en: Mayo 05, 2008, 01:17:10 »

plof no es practico por lo mismo que expresabas.  Smart EOF aun no esta explicado. Aunque lo que dices tiene sentido. Seria interesante que alguien mas explicara.


Eso.... que alguien mas explique, porque asi como lo expuse fue que lo entendi, y me sirvio en el code que hice para el escalador de privilegios (o backdoor)...

esperar que los maestro lleguen a explicar...

Saludos. salud
En línea

plof
Miembro
*****
Desconectado Desconectado

Mensajes: 73



Ver Perfil Email
« Respuesta #10 en: Mayo 05, 2008, 01:43:17 »

bueno creo que he entendido el funcionamiento del :eof (bueno, eso creo)
es para retornar a la linea siguiente de un call
yo llamo una funcion con el call, luego cuando esta termine vuelve y ejecuta la linea que le sigue al call...
si no es asi entonces terco terco
la voy a poner en un code que toy haciendo ahora...
Saludos.

Esa es la idea Smart.
La función EOF te devuelve a shell para un batch, pero si nos encontramos en una función, nos retorna al pto en que fue llamada como tu mismo has dicho.
De esta manera, la linea ' @echo off&call:main&goto:EOF'  llama a la función main y después nos devuelve a la shell.
La función main sería pues la función principal del documento. Desde esta función se llamaría una a una todas las demas funciones que sean necesarias y el EOF del main representaría el final de esta función ppal.
En las demas funciones, habrás visto que no dependen de variables definidas en otras funciones (ni siquiera en las que se declararon en main).

Por ejemplo:
La linea set /A n=%2
podría escribirse como set /A n=%linea%
y nos ahorramos el paso de cualquier argumento en la llamada.
 
En mi opinión, ésto nos ahorra pantallazos  terco terco con las variables. En batch no existe ámbito de variable, es decir, una variable se declara para todo el documento (variables globales) y cuando nuestro code es muy extenso, nos puede acarrear más de un problema. 

Mi idea es hacer funciones que solucionen un problema determinado siendo independientes del resto del documento (variables declaradas fuera de la función). Así conseguimos un código reutilizable, podemos  llevarnos estas funciones a otro code sin ningún problema.


plof no es practico por lo mismo que expresabas.  Smart EOF aun no esta explicado. Aunque lo que dices tiene sentido. Seria interesante que alguien mas explicara.
Huh Huh Huh
En línea
wizard_0
Miembro
*****
Desconectado Desconectado

Mensajes: 108


wizard_0_@hotmail.com
Ver Perfil Email
« Respuesta #11 en: Mayo 05, 2008, 06:52:10 »

Hola como va...
mmm...  espero  q  este code.. sea el  mas...  facil.. de entender...

 @echo off
set /p f=
set /p l=
set lin=%l%
set /a l-=1
if %l% LSS 1 (for /f "tokens=*" %%a in (%f%) do set text=%%a&&goto result) else (for /f "skip=%l% tokens=*" %%a in (%f%) do set text=%%a&&goto result)
:result
echo El archivo en la linea %lin% del archivo %f%
echo Es %text%
pause

salu2.. Afro
En línea

↑__P®egun†a__b!na®¡a__↑

3reS_un__[1]__ø__[0]__?¿?¿
        ø__vives__ø__mueres

Si__estas__v1vø_!!!__ganate__el__ saludo_!!!

"http://miarroba.com/foros/ver.php?id=1215889"
plof
Miembro
*****
Desconectado Desconectado

Mensajes: 73



Ver Perfil Email
« Respuesta #12 en: Mayo 05, 2008, 08:38:07 »

for /?
skip=n       - especifica el n£mero de
                    l¡neas que hay que saltarse al principio
                    del archivo.

.... terco terco terco terco

Tanto mirar codes y lo tenía en mis narices xdDx...Muchas gracias wizard.  Grin


En línea
:: SmartGenius™ :: ツ
Moderación
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1624


Hello there...you was Bluejacked ¡¡...xD

smartgenius@el-hacker.org
Ver Perfil WWW
« Respuesta #13 en: Mayo 05, 2008, 09:10:52 »

Bien, ya se supo que era con el skip..

pero donde hace la comprobacion de la linea, launica que veo es ...

set /a l-=1
if %l% LSS 1 (...) else (...)...

y como funciona el -= que todavia no lo he llegado a entender, al igual que otros parecidos que he visto +=... y eso que toy aprendiendo java y tambioen he visto parecidos...

Saludos.
En línea

plof
Miembro
*****
Desconectado Desconectado

Mensajes: 73



Ver Perfil Email
« Respuesta #14 en: Mayo 05, 2008, 10:33:19 »

Sólo hace una comparación, si la linea la primera.
l es la linea que queremos obtener.
lin es una copia de esa linea.
set /a l-=1 lo que hace es decrementar en 1 esa linea ( l = l - 1 )

Si l es menor que 1 es porque la linea que queriamos era la primera y por tanto no hace falta skip.
En caso contrario nos saltamos el numero de lineas e imprimimos directamente esa linea.

Buen code
En línea
wizard_0
Miembro
*****
Desconectado Desconectado

Mensajes: 108


wizard_0_@hotmail.com
Ver Perfil Email
« Respuesta #15 en: Mayo 06, 2008, 10:27:33 »

 ;DMuy  wena  explicacion  ni yo podria  verlo  echo mejor...

salu2-->
En línea

↑__P®egun†a__b!na®¡a__↑

3reS_un__[1]__ø__[0]__?¿?¿
        ø__vives__ø__mueres

Si__estas__v1vø_!!!__ganate__el__ saludo_!!!

"http://miarroba.com/foros/ver.php?id=1215889"
Mhr!.-
Recien Llegado
*
Desconectado Desconectado

Mensajes: 17


Ver Perfil
« Respuesta #16 en: Mayo 10, 2008, 12:41:12 »

Bueno con un simple:

 @echo off
echo hola
echo como estas
for /f "tokens=4 delims= " %%1 in (hola.txt) do set a=%%1
echo %a%

echo eso es todo


Saludosss,,  Wink

En línea
Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Batch (Moderadores: Espectro Infernal, The Shadow)  |  Tema: COMO ESCOGER UNA LINEA DE OTRO TEXTO? « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC