Scripting 使用脚本字典创建复杂结构-VBScript
我试图理解一些代码,以便对其进行修改。我是vbscript的新手,非常感谢您的帮助 我看到的是一个Dictionary对象,它的行为类似于一个表,其中包含由键控制的不同行。我不知道发生了什么事。命令如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
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
的变量,用于依次存储字典中的每个键,因为每个的枚举其键。