Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Cascuda en 20 Junio 2015, 10:45 am



Título: Cargar fichero TXT y asignarle a cada linea, una variable. -- VBS --
Publicado por: Cascuda en 20 Junio 2015, 10:45 am
Llevo  ya unas semanas dándole vueltas, pero no soy capaz de desarrollar la idea que tengo en mente.
Lo que estaba pensando, era leer un archivo TXT y a partir de ahi, sacar de cada linea el nombre de la variable y su valor.

Ejemplo de fichero TXT
Código
  1. site = espanha
  2. lugar= madrid
  3. so = win7
  4. ie = ie9
  5. puesto = 11
  6.  


Donde he llegado sin problema, es leer el nombre de la variable y luego lo que continua "su valor" asi en todas, hasta llegar a la ultima. Pero luego. lo que no he sido capaz de desarrollar. es que me cargue esas variables en el VBS para luego hacer consultas o condiciones o etc...

Código
  1. Const ForReading = 1
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. Set ts = fso.OpenTextFile("prueba.txt", ForReading)
  4.  
  5. Do Until ts.AtEndOfStream
  6. strNextLine = ts.Readline
  7. arrServiceList = Split(strNextLine , "=")
  8.  
  9. Msgbox arrServiceList(o)
  10. For i = 1 to Ubound(arrServiceList)
  11. Msgbox arrServiceList(i)
  12. Next
  13. Loop
  14.  


Si me podéis orientar como seguir, ya que mi mente se quedo bloqueada, os lo agradeceria.

Un saludo, Cascuda


Título: Re: Cargar fichero TXT y asignarle a cada linea, una variable. -- VBS --
Publicado por: Eleкtro en 20 Junio 2015, 18:37 pm
El planteamiento de tú código es incorrecto, ¿qué ocurre si por ejemplo el valor de una de las variables contiene un símbolo "="?.

Aquí te escribo este ejemplo para crear variables dinámicamente.
Código
  1. Option explicit : Dim file, curLine, curIndex, _
  2.                      varPreffix, varName, varValue
  3.  
  4. ' Defino un prefijo para el nombre de las variabes dinámicas.
  5. varPreffix = "var"
  6.  
  7. ' Instancio el Stream del objeto que lee el archivo de texto.
  8. Set file = CreateObject("Scripting.FileSystemObject"). _
  9.                        OpenTextFile("Archivo.txt", 1)
  10.  
  11. ' Itero las lineas del archivo.
  12. Do Until file.AtEndOfStream
  13.  
  14.    curIndex = (curIndex + 1)
  15.    curLine  = file.Readline
  16.  
  17.    ' varName  = Trim(Mid(curLine, 1, InStr(curLine, "=") - 1))
  18.    varValue = Trim(Mid(curLine,    InStr(curLine, "=") + 1))
  19.  
  20.    ' Creo la variable dinamicamente.
  21.    ExecuteGlobal varPreffix & curIndex & "=" & """" & varValue & """"
  22.  
  23.    ' Muestro el nombre de la variable y el valor.
  24.    Execute "WSCript.Echo varPreffix & curIndex & ""="" & " & varPreffix & curIndex
  25.  
  26.    ' En resumen, para acceder mediante un índice:
  27.    ' ExecuteGlobal "WScript.Echo " & varPreffix & curIndex
  28.  
  29. Loop
  30.  
  31. ' Cierro el Stream.
  32. file.Close()
  33.  
  34. WScript.Quit(0)

Resultado de ejecución:
Código:
Cscript.exe /NoLogo "Archivo.vbs"

var1=espanha
var2=madrid
var3=win7
var4=ie9
var5=11

Saludos


Título: Re: Cargar fichero TXT y asignarle a cada linea, una variable. -- VBS --
Publicado por: Cascuda en 21 Junio 2015, 10:56 am
Muchas gracias Electro,

Realmente discrimine el =, ya que sabia que ningún de los valores asignados por ahora, iban a serlo. Pero muy bien pensado. Ya que nunca sabes cuando realmente puede ser, que  eso suceda.

He usado tu ejemplo, pero lo he modificado a mis necesidades. Ya que prefiero usar las variables con el nombre que me muestra en el TXT, en vez que me cargue dinamicamente un prefijo. Aun que realmente, ya lo habías definido usted en el codigo y solo tuve que modificar las cadenas.

Un saludo, Cascuda



Título: Re: Cargar fichero TXT y asignarle a cada linea, una variable. -- VBS --
Publicado por: Cascuda en 21 Junio 2015, 11:07 am
No me he dado cuenta, pero pego el código modificado. Por si alguien quiere ver lo simples cambios que he hecho.

Código
  1. Option explicit : Dim file, curLine, curIndex, _
  2.                      varName, varValue
  3.  
  4. ' Instancio el Stream del objeto que lee el archivo de texto.
  5. Set file = CreateObject("Scripting.FileSystemObject"). _
  6.                        OpenTextFile("prueba.txt", 1)
  7.  
  8. ' Itero las lineas del archivo.
  9. Do Until file.AtEndOfStream
  10.  
  11.  
  12.    curLine  = file.Readline
  13.  
  14.    varName  = Trim(Mid(curLine, 1, InStr(curLine, "=") - 1))
  15.    varValue = Trim(Mid(curLine,    InStr(curLine, "=") + 1))
  16.  
  17.    ' Creo la variable dinamicamente.
  18.    ExecuteGlobal varName & "=" & """" & varValue & """"
  19.  
  20.    ' Muestro el nombre de la variable y el valor.
  21.    Execute "WSCript.Echo varName & ""="" & " & varName
  22.  
  23. Loop
  24.  
  25. ' Cierro el Stream.
  26. file.Close()
  27.  
  28. 'Verifico que realmente funciona.
  29. Msgbox "funciona (" & site & ")"
  30. Msgbox "funciona (" & consolide & ")"
  31. Msgbox "funciona (" & consolidante & ")"
  32.  
  33.  
  34. WScript.Quit(0)
  35.