2011-08-04 32 views
2

我想了解一些代碼,以便我可以對其進行修改。我對vbscript相當新,所以任何幫助表示讚賞。使用Scripting Dictionary創建複雜結構 - VBScript

我正在查看一個字典對象,它看起來像一個表,它的行爲像一個表,不同的行由一個鍵控制。我不確定發生了什麼事。命令如 list.addlist.count+1ListElement現在有點超過我的聯盟。該代碼是能夠輸出數據1使用簡單的語句

Sub DumpList (list) 
' This function dumps all the people in the office and their information 
' in the application window. The list is usually sorted by Name. 

Dim e, le 

For Each e In list ' output listelements... 
    Set le = list(e) 

    LogOutput 0, "line: " & (le.num, 3) & " : " & le.Name _ 
       & " " & le.PHNumber1 & " " & le.PHNumber2 _ 
       & " " & le.Email1 & " " & le.Email2 _ 
       & " " & le.DeskNo.1 & " " & le.OFficeCode _ 
       & " " & le.wirecolour & " " & le.wirecross 
Next 
End Sub 

我不知道它是如何工作,我做任何更改。

再次感謝

+0

你看過[Dictionary對象的文檔](http://msdn.microsoft.com/en-us/library/x4k5wbx4%28v=VS.85%29.aspx)嗎? –

回答

0

在這種情況下可變list持有Scripting.Dictionary

當您使用VBScript For EachScripting.Dictionary上構造時,將返回字典中的每個。因此,在這種情況下,For Each將在每次迭代中將每個密鑰放入變量e中。

行: -

Set le = list(e) 

現在是用這個循環的關鍵,查找與該鍵關聯的字典中的值。在這種情況下,該值是具有屬性的對象。

因此,可以使用字典快速直接使用鍵查找「表」中的「行」。同樣,由於您發佈的代碼演示了您可以枚舉每個鍵並查找每個值以「掃描」整個「表」。

+0

我明白了。儘管我仍然無法將自己的頭圍繞在這個事實上,即如何在這種情況下使用單個鍵「e」查找所有不同的項目,如(phnumber,email ...)它是怎麼回事所有這些項目都使用1鍵查找。該設置看起來像一個表與多個行關聯到1鍵,我認爲腳本字典與鍵和項目有1對1的關係。 – sanwar

+0

@sanwar:沒有單個鍵「e」存在__是__變量___被稱爲'e',它用於依次存儲字典中的每個鍵,因爲'for each'枚舉了它的鍵。 – AnthonyWJones

1

任務: 維護一組人員。

在溶液首先嚐試: 使用帶有數值指標=鍵,基於dic.Count

作爲sanwar字典指出的那樣,一個字典中存儲的鍵 - 值對。爲了在字典中放置(信息) 人,我們需要一個人類,我們可以從中創建人物 對象/實例來保存多個信息元素。對於一個Person類

最小/ POC代碼:

Dim g_nPersonId : g_nPersonId = -1 
Class cPerson 
    Private m_nId 
    Private m_sName 
    Private m_dtBirth 
    Private m_dWage 
    Public Function init(sName, dtBirth, dWage) 
    Set init = Me 
    g_nPersonId = g_nPersonId + 1 
    m_nId  = g_nPersonId 
    Name  = sName 
    Birth  = dtBirth 
    Wage  = dWage 
    End Function 
    Public Property Let Name( sName ) : m_sName = sName  : End Property 
    Public Property Let Birth(dtBirth) : m_dtBirth = dtBirth : End Property 
    Public Property Let Wage( dWage ) : m_dWage = dWage  : End Property 
    Public Property Get Id()    : Id  = m_nId  : End Property 
    Public Property Get Name()   : Name  = m_sName : End Property 
    Public Property Get Birth()   : m_dtBirth = m_dtBirth : End Property 
    Public Property Get Wage()   : m_dWage = m_dWage : End Property 
    Public Function Data() 
    Data = Array(m_nId, m_sName, m_dtBirth, m_dWage) 
    End Function 
End Class ' cPerson 

[類cPerson定義/藍圖者,每一個都具有一個ID,名稱,出生日期,和 工資。您可以通過調用init函數來創建人員,名稱,文檔和工資成員均可通過合適的值 ;該id將自動增加(通過使用全局 計數器,而不是在更多功能的OO語言中使用適當的類級別數據)。]

和演示腳本來證明我們可以創建和顯示人數:

Dim oAdam : Set oAdam = New cPerson.init("Adam", #1/5/2001#, 1234.56) 
    Dim oEve : Set oEve = New cPerson.init("Eve" , #1/6/2001#, 6543.21) 
    Dim oPerson 
    For Each oPerson In Array(oAdam, oEve) 
     WScript.Echo Join(oPerson.Data(), " - ") 
    Next  

輸出:

0 - Adam - 1/5/2001 - 1234.56 
1 - Eve - 1/6/2001 - 6543.21 

現在,讓我們把它們與數字鍵的字典(一個VBScript特殊 功能,其他語言僅包含字符串鍵字典),基於 .Count屬性。空字典的.Count屬性爲0,通過將 第一個元素(一個持有我們需要的所有信息的人物對象)添加到字典 ,其.Count遞增爲1(爲下一個添加做好準備)。您可以輕鬆地看到 說。新增.Count之間+ 1是時間/精力的浪費:

Dim dicPersons : Set dicPersons = CreateObject("Scripting.Dictionary") 
    Dim aPersons : aPersons  = Array(_ 
     Array("Adam", #1/5/2001#, 1234.56) _ 
     , Array("Eve" , #1/6/2001#, 6543.21) _ 
) 
    Dim aPerson 
    For Each aPerson In aPersons 
     dicPersons.Add dicPersons.Count, New cPerson.init(aPerson(0), aPerson(1), aPerson(2)) 
    Next 
    Dim nPerson 
    WScript.Echo "Adam & Eve" 
    For Each nPerson In dicPersons 
     WScript.Echo nPerson, ":", Join(dicPersons(nPerson).Data(), " - ") 
    Next  
    dicPersons.Remove 0 ' how do we know the key of Adam? 
    WScript.Echo "Adam zaped" 
    For Each nPerson In dicPersons 
     WScript.Echo nPerson, ":", Join(dicPersons(nPerson).Data(), " - ") 
    Next  
    WScript.Echo "Trying to add Caine" 
On Error Resume Next 
    dicPersons.Add dicPersons.Count, New cPerson.init("Caine", Date(), 0.33) 
    WScript.Echo Err.Description 
On Error GoTo 0 

輸出

Adam & Eve 
0 : 0 - Adam - 1/5/2001 - 1234.56 
1 : 1 - Eve - 1/6/2001 - 6543.21 
Adam zaped 
1 : 1 - Eve - 1/6/2001 - 6543.21 
Trying to add Caine 
This key is already associated with an element of this collection 

說明了爲什麼基於.Count中與數字索引字典是無解 任務:維護一個人的集合。