尝试获取数组的最后一项时下标超出范围

Subscript out of range when trying to get last item of an Array

比如我有一个字符串A-456-BC-123;DEF-456;GHI-789。我需要用关键字 456 搜索第二部分:DEF-456。这里的潜在问题是第一部分 A-456-BC-123 也有关键字 456。目前我的逻辑是,split 字符串首先使用 ;split 每个字符串再次使用 -,得到这个 Array 的最后一项,搜索关键字 456。还有就是我不想做DEF-456这样的全关键字匹配,我只想用456作为关键字来定位DEF-456,换句话说,456 应该是我想要的字符串的最后一段。

这是我的代码:

FirstSplit= split("A-456-BC-123;DEF-456;GHI-789",";")

For each code in FirstSplit
    SecondSplit = split(FirstSplit,"-")
    'get Array Count
    Count = Ubound(SecondSplit)
    'get the last item in Array
    If SecondSplit(Count-1) = "456" Then
      'doing something
    End if
Next

目前,在SecondSplit(Count-1)会产生一个错误,说"Subscript out of range: '[number: -1]'"

有人可以告诉我如何解决吗?

真正的问题在这里:

SecondSplit = Split(FirstSplit, "-")

您应该从 For Each 循环中拆分存储在变量 code 中的元素。通过尝试拆分数组,您应该得到一个 Type Mismatch 错误,但也许 vbscript 足够宽容以尝试 return 一个 0 元素数组返回或其他东西。不管怎样:

SecondSplit = Split(Code, "-")

此外,要查看最后一个元素,只需使用:

If secondSplit(Ubound(SecondSplit)) = "456" Then

ubound 中减去 1 将得到倒数第二个元素。

您不需要将其拆分两次 - 您要查找的是 Right():

FirstSplit = split("A-456-BC-123;DEF-456;GHI-789",";")

For each code in FirstSplit
    If Right(code, 3) = "456" Then
        ' do something
    End If
Next

虽然这也匹配 ABC-1456 这样的条目。如果 - 符号是必需的分隔符,则必须说 If Right(code, 4) = "-456".