我正在尝试使用vbscript的Eval(或者我可能需要Execute)从ini文件中的键名创建一些变量。 ini文件可以具有无限的未知key = val对。无论如何,我都需要根据键名创建一个变量。
Ini文件内容:
myPath=c:\test
myExe=myapp.exe
....
xxx=123
yyy=abc
我的代码读取ini并将键和值返回给对象
我正在尝试的代码在这里:
For each pair in objINI
Eval("pair.key=pair.val")
Next
msgbox myPath
msgbox myExe
但两个msgbox都显示为空 是的,我确信pair.key和pair.val具有正确的值。
关于我缺少什么或者是否可能这样做的想法?
答案 0 :(得分:3)
你需要Execute
(一个赋值语句),而不是Eval
(使用布尔表达式):
>> n = "Name"
>> v = "Value"
>> WScript.Echo TypeName(Eval("n=v"))
>>
Boolean
>> Execute "n=v"
>> WScript.Echo n
>>
Value
>>
来自文档:
在VBScript中,x = y可以用两种方式解释。第一个是作为 赋值语句,其中y的值分配给x。该 第二种解释是作为测试x和y是否具有的表达式 相同的价值。如果他们这样做,结果是真的;如果他们不是,结果是 假。 Execute语句总是使用第一个解释, 而Eval方法总是使用第二种方法。
(这并不意味着你应该做这些事;无论是在家里还是在工作中)
答案 1 :(得分:1)
您评估了文字代码pair.key = pair.value
这将分配给pair.key
。
您要分配到pair.key
的值 - 如果pair.key
为myPath
,您需要评估myPath = pair.value
。
你可以通过连接字符串来做到这一点:
Execute(pair.name + " = pair.value")
答案 2 :(得分:0)
如果要从INI文件中读取键/值对,最好将它们存储在字典中。几年前我为此写了function。基本上看起来像这样:
Function ParseIni(filename)
Set ParseIni = Nothing
Set config = CreateObject("Scripting.Dictionary")
section = ""
Set file = CreateObject("Scripting.FileSystemObject").OpenTextFile(filename)
Do While Not file.AtEndOfStream
line = Trim(Replace(file.ReadLine, vbTab, " "))
If InStr(line, ";") > 0 Then line = Trim(Left(line, InStr(line, ";") - 1))
If line <> "" Then
If Left(line, 1) = "[" And Right(line, 1) = "]" Then
' line is a section name
section = Trim(Mid(line, 2, Len(line) - 2))
If section = "" Then _
WScript.Echo "Parse Error: section name is empty string."
If config.Exists(section) Then _
WScript.Echo "Parse Error: duplicate section name '" & name & "'."
config.Add section, CreateObject("Scripting.Dictionary")
ElseIf InStr(line, "=") > 0 Then
' line is a parameter line
If section = "" And Not config.Exists(section) Then _
config.Add section, CreateObject("Scripting.Dictionary")
param = Split(line, "=", 2)
param(0) = Trim(param(0))
param(1) = Trim(param(1))
If param(0) = "" Then _
WScript.Echo "Parse Error: invalid parameter name '" & param(0) & "'."
If param(1) = "" Then param(1) = True
config(section).Add param(0), param(1)
Else
' line is neither parameter nor section name, thus invalid
WScript.Echo "Parse Error: expected parameter definition in line '" _
& line & "'."
End If
End If
Loop
file.Close
Set ParseIni = config
End Function