如何在vbscript中清除数组的内容?

时间:2013-06-05 09:34:53

标签: vbscript

我在函数库中声明了一个二维数组,并将其与测试相关联。在测试的action1中,我尝试使用“erase”语句清除数组 我的代码 -
在函数库中,

Dim strVerifyAry(25,6)

在action1中,

erase strVerifyAry

错误消息

Run Error - Type mismatch: 'Erase'

如何清除此数组的内容?

4 个答案:

答案 0 :(得分:4)

在普通的VBScript中为我工作,所以它很可能是QTP用于运行VBScript代码的引擎的问题。您应该能够模拟Erase对于二维数组的行为,如下所示:

Sub EraseArray(ByRef arr)
  For i = 0 To UBound(arr, 1)
    For j = 0 To UBound(arr, 2)
      If IsObject(arr(i, j)) Then
        Set arr(i, j) = Nothing
      Else
        arr(i, j) = Empty
      End If
    Next
  Next
End Sub

或者像这样,如果您不想将包含对象的字段设置为Nothing

Sub EraseArray(ByRef arr)
  For i = 0 To UBound(arr, 1)
    For j = 0 To UBound(arr, 2)
      arr(i, j) = Empty
    Next
  Next
End Sub

答案 1 :(得分:1)

我不完全理解为什么,但你可以创建一个像

这样的子
Public Sub DoErase (byRef Ary)
   Erase Ary
End Sub
在库中

,并在这样的动作中调用它:

DoErase StrVerifyAry

并且有效。

更新:不,不是。数组已成功传递给DoEraseDoErase调用正常,但之后的测试仍然可以引用Erase应该擦除的数组元素。

如果测试声明了数组,它可以正常工作(Erase删除元素。)

这很奇怪,可能与函数库中的古怪范围有关。

如果你发现这里发生了什么,请告诉我们......

答案 2 :(得分:0)

这让我疯了整整一个下午,所以我想发一个答案供将来参考。我使用Split命令填充了一个数组,然后需要在脚本再次循环回过程之前擦除它。我尝试过的任何内容都不会删除或清除数组,并且下一次使用Split只会附加到前面的数组元素中 通过尝试' array = Nothing'循环上面,我终于设法生成一个"这个数组被修复或锁定了#34;我研究过的错误。事实证明我已经在“For Each..Next'锁定阵列的循环,使其无法被擦除或清除。有关详细信息HERE:

答案 3 :(得分:0)

这是一个警察,我知道......不要投票给我!

在某些情况下,您可以使用Dictionary集合而不是数组。然后在要清除它时使用RemoveAll。当您的数组是通过拆分函数创建时,这无济于事,但它可以帮助其他用例。

Set myDict = CreateObject("Scripting.Dictionary")
...
myDict.RemoveAll

请参阅:https://www.w3schools.com/asp/asp_ref_dictionary.asp