Индекс вне диапазона при попытке получить последний элемент массива

Например, у меня есть строка A-456-BC-123;DEF-456;GHI-789. И мне нужно найти вторую часть: DEF-456 по ключевому слову 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]'"

Может ли кто-нибудь сказать мне, как это исправить?


person nwpulele    schedule 26.05.2016    source источник


Ответы (2)


Настоящая проблема здесь:

SecondSplit = Split(FirstSplit, "-")

Вы должны разделить свой элемент, который вы сохранили в переменной code, из вашего цикла For Each. Пытаясь разбить массив, вы должны получить ошибку Type Mismatch, но, возможно, vbscript достаточно снисходителен, чтобы попытаться вернуть массив из 0 элементов или что-то в этом роде. Тем не мение:

SecondSplit = Split(Code, "-")

Кроме того, чтобы посмотреть на последний элемент, просто используйте:

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

Вычитание 1 из ubound даст вам предпоследний элемент.

person JNevill    schedule 26.05.2016

Вам не нужно разбивать его дважды - вам нужно 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".

person owenfromcanada    schedule 26.05.2016
comment
Или используйте что-то вроде InStr(1, StrReverse(code), "-") вместо жесткого кодирования количества символов, возвращаемых из Right(). - person user692942; 27.05.2016