elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Cómo almacenar una línea específica de un .txt en una variable SOLUCIONADO!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cómo almacenar una línea específica de un .txt en una variable SOLUCIONADO!  (Leído 5,490 veces)
<ИΘZIЭ(ŦB>

Desconectado Desconectado

Mensajes: 109


-cyman-


Ver Perfil
Cómo almacenar una línea específica de un .txt en una variable SOLUCIONADO!
« en: 24 Agosto 2009, 00:23 am »

Saludos amigos foristas!

He estado indagando en la web cómo leer un archivo .txt línea por línea, y he logrado hacerlo. Con el comando Echo se pueden mostrar cada una individualmente.

Ahora, por más que he intentado no he logrado almacenar el texto de una línea específica en una variable. El código que encontré es este:

Código:
setlocal enabledelayedexpansion

:reader
set c=0
for /f "tokens=*" %%a in (archivo.txt) do (
            set /a c+=1
            call set lin!c!=Linea_!c! = %%a
)
echo Archivo Leido

for /l %%n in (1,1,!c!) do (echo !lin%%n!)
pause
endlocal

Como ven, puedo ver cada una de las líneas perfectamente, pero no sé cómo almacenar el valor de alguna de ellas en otra variable. Sé que la sentencia call set lin!c!=Linea_!c! = %%a crea una variable que almacena el texto de cada línea por separado, pero no sé cómo tomar esos valores. Nunca he trabajado con variables tipo matriz, así que quisiera pedir su ayuda para poder hacerlo.

Intenté de esta manera, tanteando a ver:

Código:
set variable=lin!2!

Trataba de tomar el texto de la línea 2 que la variable tiene almacenada, pero no funcionó. También intenté de este modo, según leí por ahí:

Código:
set variable=%%lin%2%%%

pero tampoco funcionó. Así pues, de verdad necesito que me echen una mano, porque como ven, estoy bien perdido! :D Debe ser algo simple, pero me servirá de mucho.


« Última modificación: 24 Agosto 2009, 23:07 pm por cyman » En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Cómo almacenar una línea específica de un .txt en una variable
« Respuesta #1 en: 24 Agosto 2009, 06:57 am »

En mi articulo sobre "Acciones con archivos de texto", comenté como meter las líneas de un archivo en variables independientes, puedes consultarlo si quieres.
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set contador=0
  4. for /f "eol= tokens=* delims=" %%x in (file.txt) do (
  5. set /a contador+=1
  6. set linea!contador!=%% style="color: #448888;">x
  7. )
  8. set linea

Para acceder a una línea en especifico, podrías hacer :
Código:
echo !linea%contador%!

En el caso de el código que has propuesto, este:
Código:
setlocal enabledelayedexpansion

:reader
set c=0
for /f "tokens=*" %%a in (archivo.txt) do (
            set /a c+=1
            call set lin!c!=Linea_!c! = %%a
)
echo Archivo Leido

for /l %%n in (1,1,!c!) do (echo !lin%%n!)
pause
endlocal

Para asignar :
Código:
set "variable=!lin%indice%!"
Para mostrar es lo mismo:
Código:
echo !lin%indice o valor%!

Saludos.


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
<ИΘZIЭ(ŦB>

Desconectado Desconectado

Mensajes: 109


-cyman-


Ver Perfil
Re: Cómo almacenar una línea específica de un .txt en una variable
« Respuesta #2 en: 24 Agosto 2009, 16:42 pm »

De nuevo gracias Leo por la ayuda, pero no me funciona. O sea, no puedo traerme el valor del un índice específico a otra variable, aunque con el Echo sí. No obstante, como lo mencioné antes, lo que me interesa es usar ese valor-índice en otra variable.

Mira lo que hice:

Código:
@echo off
setlocal enabledelayedexpansion

:reader
set c=0
for /f "tokens=*" %%a in (archivo.txt) do (
            set /a c+=1
            call set lin!c!=Linea_!c! = %%a
)
echo Archivo Leido

for /l %%n in (1,1,!c!) do (echo !lin%%n!)

endlocal

set indice=1
set "variable=!lin%indice%!"
echo %variable%
pause

Y este es el resultado que me dió:

Código:
Archivo Leido
Linea_1 = Texto 1
Linea_2 = Texto 2
!lin1!
Presione una tecla para continuar . . .

¿Ves? ¡No me funciona! No me almacena el texto 2 en %variable%, sino !lin1!. ¿Es que estoy haciendo algo mal? Te agradezco de antemano. (Ah, y si puedes pon el enlace al tema que mencionaste que no lo encontré por el buscador.)
« Última modificación: 24 Agosto 2009, 16:46 pm por cyman » En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Cómo almacenar una línea específica de un .txt en una variable
« Respuesta #3 en: 24 Agosto 2009, 17:01 pm »

Quita el "endlocal" y nos dices, en caso de que no funcione ahora sí que consigo un Windows y te ayudo mejor.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
<ИΘZIЭ(ŦB>

Desconectado Desconectado

Mensajes: 109


-cyman-


Ver Perfil
Re: Cómo almacenar una línea específica de un .txt en una variable
« Respuesta #4 en: 24 Agosto 2009, 18:20 pm »

¡Listo! ¡Funcionó perfecto! De verdad te agradezco la ayuda, como siempre.

El único detalle fue que no me funcionó dentro de un If. Es decir, hice esto:

Código:
If condicion (
      setlocal enabledelayedexpansion

      set c=0
      for /f "tokens=*" %%a in (archivo.txt) do (
            set /a c+=1
            call set lin!c!=Linea_!c! = %%a
      )
      for /l %%n in (1,1,!c!) do (echo !lin%%n!)

      set indice=1
      set "variable=!lin%indice%!"
      echo %variable%
      pause
)

Así no funcionó. Tuve que hacerlo así:

Código:
If condicion goto Linea

:Linea
setlocal enabledelayedexpansion

set c=0
for /f "tokens=*" %%a in (archivo.txt) do (
      set /a c+=1
      call set lin!c!=Linea_!c! = %%a
)
for /l %%n in (1,1,!c!) do (echo !lin%%n!)

set indice=1
set "variable=!lin%indice%!"
echo %variable%
pause

Así sí funcionó. Fue el único detalle, tal vez puedas explicar por qué pasó. Sería útil aprender más sobre eso. Por lo demás muchas gracias de verdad. Ah, y no olvides colocar el enlace al otro tema que mencionaste por favor.
« Última modificación: 24 Agosto 2009, 18:47 pm por cyman » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
almacenar salida de un programa en una variable Vbscript ??
Scripting
kapo.damy 6 6,556 Último mensaje 11 Octubre 2011, 07:58 am
por kapo.damy
¿Cómo almacenar el resultado de un comando MSDOS en una variable?
Scripting
elenapardo 2 4,831 Último mensaje 4 Noviembre 2014, 01:36 am
por elenapardo
Capturar una linea específica de todo un texto
Java
Josebarra 2 2,629 Último mensaje 5 Mayo 2015, 04:08 am
por Josebarra
[SOLUCIONADO]Python - ¿Cómo volver a una linea específica?
Scripting
Biodude9456 5 13,488 Último mensaje 28 Febrero 2016, 14:04 pm
por fary
Leer una linea especifica de un txt a traves de un bat
Scripting
bichomen 1 2,899 Último mensaje 22 Enero 2019, 16:11 pm
por EdePC
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines