2013-06-05 95 views
1

我想用vbscript的Eval(或者我需要執行)從一個ini文件中的鍵名創建一些變量。 ini文件可以具有無限的未知鍵= val對。無論如何,我需要根據密鑰名稱創建一個變量。vbscript將字符串評估爲循環中的變量?

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具有正確的值。

關於我缺少什麼或者甚至有可能的想法?

+2

我認爲你需要重新評估你的架構。有一個ini文件,可以設置任何變量,它想要的聲音...不安全。 – Richard

+0

在我的例子中看起來不像它的實際工作方式。沒有風險。 – Dss

+2

'eval'和風險是同義詞。 –

回答

1

您評估了字面代碼pair.key = pair.value
分配給pair.key

你想分配給價值pair.key –如果pair.keymyPath,要EVAL myPath = pair.value
你可以做到這一點的連接字符串:

Execute(pair.name + " = pair.value") 
+0

但我不知道「myPath」將成爲我的鍵名。我需要根據文件中的鍵名動態生成變量。我的ini文件可能有「myPath」..另一個人可能稱之爲「xPath」..最後,我將需要使用msgbox myPath,他將需要使用msbox xPath – Dss

+0

@Dss:正確。您需要將字符串連接到eval。 – SLaks

+0

@SLaks -1用於混合評估和執行[全局]。 –

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是否具有相同的值 。如果他們這樣做,結果是真的;如果它們不是,結果是 錯誤。執行語句總是使用第一種解釋 ,而Eval方法總是使用第二種解釋。

(這並不意味着你應該做這樣的事情,也不在家裏,也不是在工作中)

+0

好的謝謝澄清..我一直試圖評估和執行,但不斷攪拌,這是做什麼。使用下面的信息和SLaks答案瞭解它 – Dss

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