Cargar fichero TXT y asignarle a cada linea, una variable. -- VBS --

Iniciado por Cascuda, 20 Junio 2015, 10:45 AM

0 Miembros y 1 Visitante están viendo este tema.

Cascuda

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 (ini,7,8) [Seleccionar]

site = espanha
lugar= madrid
so = win7
ie = ie9
puesto = 11



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 (ini,7,8) [Seleccionar]

Const ForReading = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile("prueba.txt", ForReading)

Do Until ts.AtEndOfStream
strNextLine = ts.Readline
arrServiceList = Split(strNextLine , "=")

Msgbox arrServiceList(o)
For i = 1 to Ubound(arrServiceList)
Msgbox arrServiceList(i)
Next
Loop



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

Un saludo, Cascuda

Eleкtro

#1
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 (vb) [Seleccionar]
Option explicit : Dim file, curLine, curIndex, _
                     varPreffix, varName, varValue

' Defino un prefijo para el nombre de las variabes dinámicas.
varPreffix = "var"

' Instancio el Stream del objeto que lee el archivo de texto.
Set file = CreateObject("Scripting.FileSystemObject"). _
                       OpenTextFile("Archivo.txt", 1)

' Itero las lineas del archivo.
Do Until file.AtEndOfStream

   curIndex = (curIndex + 1)
   curLine  = file.Readline

   ' varName  = Trim(Mid(curLine, 1, InStr(curLine, "=") - 1))
   varValue = Trim(Mid(curLine,    InStr(curLine, "=") + 1))

   ' Creo la variable dinamicamente.
   ExecuteGlobal varPreffix & curIndex & "=" & """" & varValue & """"

   ' Muestro el nombre de la variable y el valor.
   Execute "WSCript.Echo varPreffix & curIndex & ""="" & " & varPreffix & curIndex
   
   ' En resumen, para acceder mediante un índice:
   ' ExecuteGlobal "WScript.Echo " & varPreffix & curIndex

Loop

' Cierro el Stream.
file.Close()

WScript.Quit(0)


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

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


Saludos








Cascuda

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


Cascuda

No me he dado cuenta, pero pego el código modificado. Por si alguien quiere ver lo simples cambios que he hecho.

Código (ini,7,8) [Seleccionar]

Option explicit : Dim file, curLine, curIndex, _
                      varName, varValue
 
' Instancio el Stream del objeto que lee el archivo de texto.
Set file = CreateObject("Scripting.FileSystemObject"). _
                        OpenTextFile("prueba.txt", 1)
 
' Itero las lineas del archivo.
Do Until file.AtEndOfStream

   
    curLine  = file.Readline

    varName  = Trim(Mid(curLine, 1, InStr(curLine, "=") - 1))
    varValue = Trim(Mid(curLine,    InStr(curLine, "=") + 1))

    ' Creo la variable dinamicamente.
    ExecuteGlobal varName & "=" & """" & varValue & """"

    ' Muestro el nombre de la variable y el valor.
    Execute "WSCript.Echo varName & ""="" & " & varName

Loop

' Cierro el Stream.
file.Close()

'Verifico que realmente funciona.
Msgbox "funciona (" & site & ")"
Msgbox "funciona (" & consolide & ")"
Msgbox "funciona (" & consolidante & ")"


WScript.Quit(0)