在vbscripting中将数组内容添加到字典对象

时间:2013-06-05 11:42:33

标签: vbscript

   dim a;
   a(0)=migration
   a(1)=blue
    a(2)=syntax
   a(3)=green
    dim d;
set d=createobject(scripting.dictionary)
for i=0 to UBOUND(a)
msgbox a(i)
d.add a(i),a(i+1)
next

在VBSCRIPTING中,请解释任何一个为什么我得到一个“错误下标超出范围”,以添加内容到字典。我必须将数组内容添加到字典

2 个答案:

答案 0 :(得分:2)

您的Dim a声明一个普通的Variant(并将其初始化为Empty)。您的a(i)=whatever(尝试)使用a作为变种数组。将您的代码更改为:

>> Dim a(3)
>> a(0)="zero"
>> a(1)="one"
>> a(2)="zwei"
>> a(3)="last of four"

(标记引号!和;根本不存在!)以获得有用的固定数组。然后重新考虑(并发布)你希望如何将数组中的信息转换为字典 - 就像现在一样,表达式a(i+1)应该抛出一个错误,因为{{1}中不能有一个i + 1元素1}}当我到达a

答案 1 :(得分:1)

Ekkehard.Horner已经指出导致错误的原因(+1),但也许还有一些解释。

你有一个包含4个元素的数组:

a(0) = "migration"
a(1) = "blue"
a(2) = "syntax"
a(3) = "green"

由于VBScript数组是从零开始的,因此该数组的上限为3.当您在这样的循环中迭代数组时:

For i = 0 To UBound(a)  'remember: UBound(a) == 3
  d.Add a(i), a(i+1)
Next

展开的循环执行以下操作:

d.Add a(0), a(1)
d.Add a(1), a(2)
d.Add a(2), a(3)
d.Add a(3), a(4)

数组的上限为3,因此尝试访问索引4处的元素会导致subscript out of range错误,这基本上意味着您正在尝试访问数组边界外的数组索引。

如果您的循环在当前索引之后处理元素,则必须停止在倒数第二个索引处理,即您需要将循环更改为:

For i = 0 To UBound(a)-1
  d.Add a(i), a(i+1)
Next