2010-12-08 114 views
0

動態獲取VBScript(經典ASP)字典對象值時發生錯誤是的,它是一個漫長而複雜的標題......對不起。當For ... Each Loop

我正在用良好的時尚ASP在VBScript中工作。我有一個字典對象,字典中的每個對象都由它的Key和一個Array作爲Item組成。

Dim myDictionary 
Set myDictionary = CreateObject("Scripting.Dictionary") 

myDictionary.Add "a", Array("a1","a2") 
myDictionary.Add "b", Array("b1","b2") 
myDictionary.Add "c", Array("c1","c2") 

我也傳遞到腳本字符串列表(並轉換到一個數組),即與各種字典條目對應,因此,只有那些條目可以在網頁上顯示,並在順序陣列。

Dim myText 
myText = "a, b, c" 

Dim myArray 
myArray = Split(myText,",") 

現在,我想遍歷數組,並顯示每個對應的鍵在myDictionary中的內容。

For Each thing in myArray 
    Response.Write myDictionary.Item(thing)(0) & "&nbsp;" & myDictionary.Item(thing)(1) & "<br />" & vbcrlf 
Next 

它在第一次迭代中完美工作,並正確地打印到頁面。但在第二次迭代中,我得到一個錯誤。下面是頁面上的全輸出:

A1 + A2

Microsoft VBScript運行時錯誤

'800a000d' 類型不匹配:項目(...)「

/高山/ EN_US /testCase.asp,line 28

任何人都知道爲什麼這不起作用?自然地,這裏顯示的代碼只是一個測試用例,但我的應用程序中存在完全相同的問題。

下面是完整的代碼,所以你可以只需將其切成正貼到您的測試環境中,如果它可以幫助你幫助我這一個:

<%@LANGUAGE="VBSCRIPT"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Iterating through Dictionary objects - Test Case</title> 
</head> 

<body> 

<% 


Dim myDictionary 
Set myDictionary = CreateObject("Scripting.Dictionary") 

myDictionary.Add "a", Array("a1","a2") 
myDictionary.Add "b", Array("b1","b2") 
myDictionary.Add "c", Array("c1","c2") 

Dim myText 
myText = "a, b, c" 

Dim myArray 
myArray = Split(myText,",") 

For Each thing in myArray 
    Response.Write myDictionary.Item(thing)(0) & "&nbsp;" & myDictionary.Item(thing)(1) & "<br />" & vbcrlf 
Next 

%> 


</body> 
</html> 

其他一些有趣的片段這個問題...

當我硬編碼的迭代中所有三個字典條目,它工作正常:

For Each thing in myArray 
    Response.Write myDictionary.Item("a")(0) & "&nbsp;" & myDictionary.Item("a")(1) & "<br />" & vbcrlf 
    Response.Write myDictionary.Item("b")(0) & "&nbsp;" & myDictionary.Item("b")(1) & "<br />" & vbcrlf 
    Response.Write myDictionary.Item("c")(0) & "&nbsp;" & myDictionary.Item("c")(1) & "<br />" & vbcrlf 
Next 

產生以下:

A1 + A2
B1,B2,
C1 C2
A1 A2
B1,B2,
C1 C2
A1 + A2
B1,B2,
C1 C2

,並驗證在for-each循環的 '東西' 變量工作:

For Each thing in myArray 
    Response.Write thing 
Next 

產生以下:

ABC

我很困惑...

謝謝大家!我非常感謝您提供的任何幫助。 :-)

乾杯,
Lelando

回答

3

這是因爲你有你的myText逗號後面的空格。 Split函數創建一個值爲"a", " b", " c"的數組。後兩個值不存在於您的字典中。

替換行

myText = "a, b, c" 

隨着

myText = "a,b,c" 

或用", "改變你的標記符(注意空格)。

+0

嗯,那樣做!由於我所有可能的關鍵術語都是單個單詞,並且我知道將創建逗號分隔列表的人將使用空格*不一致*,我想也必須先從列表中刪除所有空格。聽起來很對你? – Lelando 2010-12-08 00:50:10