Scripting 使用脚本字典创建复杂结构-VBScript

Scripting 使用脚本字典创建复杂结构-VBScript,scripting,vbscript,Scripting,Vbscript,我试图理解一些代码,以便对其进行修改。我是vbscript的新手,非常感谢您的帮助 我看到的是一个Dictionary对象,它的行为类似于一个表,其中包含由键控制的不同行。我不知道发生了什么事。命令如 list.addlist.count+1,liselement现在有点超出我的能力范围。该代码能够输出数据供1使用,使用简单语句 Sub DumpList ( list ) ' This function dumps all the people in the office and their i

我试图理解一些代码,以便对其进行修改。我是vbscript的新手,非常感谢您的帮助

我看到的是一个Dictionary对象,它的行为类似于一个表,其中包含由键控制的不同行。我不知道发生了什么事。命令如
list.add
list.count+1
liselement
现在有点超出我的能力范围。该代码能够输出数据供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
我不确定对它进行任何更改对我来说是如何工作的


再次感谢

在本例中,变量
列表
包含一个
脚本.Dictionary

当您对
脚本上的每个
构造使用VBScript
时,将返回字典中的每个键。因此在这种情况下,每个
将在每次迭代中将每个键放置在变量
e

该行:-

 Set le = list(e)
现在正在使用此循环的键查找与该键关联的字典中的值。在本例中,值是具有属性的对象

因此,可以使用字典键快速直接地查找“表”中的“行”。正如您发布的代码所示,您可以枚举每个键并查找每个值以“扫描”整个“表”。

任务: 保持人员的集合

解决方案的第一次尝试: 根据dic.Count使用数字索引=键的字典

正如sanwar指出的,字典存储键值对。放置(有关的信息) 在字典中,我们需要一个person类,从中我们可以创建person 对象/实例来保存多个信息元素

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、一个姓名、一个dob和 通过调用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属性为0 字典的第一个元素(保存我们需要的所有信息的person对象) 其.Count增量为1(准备进行下一次添加)。你很容易看到 .Add.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的数字索引字典无法解决问题的原因
对于任务:维护一组人员。

您看过了吗?我理解..尽管我仍然无法理解这样一个事实,即在本例中,使用一个键“e”如何查找所有不同的项目,如(phnumber,email…)如何使用一个键查找所有这些项目。设置看起来像一个表,有多行与一个键关联,我认为脚本字典与键和项有1对1的关系。@sanwar:没有单个键“e”。有一个名为
e
的变量,用于依次存储字典中的每个键,因为每个
枚举其键。