[решено] Пройтись по массиву

Ответить
Аватара пользователя
morgan1991

[решено] Пройтись по массиву

Сообщение morgan1991 »

Люди добрые скажите что это за ошибка:



Код:

Код: Выделить всё

Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

Вылетает после этого:





Код:

Код: Выделить всё

For $i = 1 To $sTest_Split[0]
      If $sTest_Split[$i] = "" Then _ArrayDelete($sTest_Split, $i)
Next

если тут $sTest_Split[$i] вместо $i ставлю число то всё работает.

Что может быть?
Аватара пользователя
Creat0R

Re: [решено] Пройтись по массиву

Сообщение Creat0R »

Цитата morgan1991:



Что может быть?
[решено] Пройтись по массиву




Попытка чтения элемента после его удаления. Т.е элемент не существует, а в цикле происходит попытка его использовать. Нужно в таком случае обрабатывать в обратном порядке:





Код:

Код: Выделить всё

For $i = $sTest_Split[0] To 1 Step -1
    If $sTest_Split[$i] = "" Then _ArrayDelete($sTest_Split, $i)
Next

А ещё лучше (надёжнее), использовать временную переменную массива:





Код:

Код: Выделить всё

$aTmp_Split = $aTest_Split
For $i = 1 To $aTmp_Split[0]
    If $aTmp_Split[$i] = "" Then _ArrayDelete($aTest_Split, $i)
Next

Или так:





Код:

Код: Выделить всё

Dim $aTmp_Split[$aTest_Split[0]+1]
For $i = 1 To $aTest_Split[0]
    If $aTest_Split[$i] = "" Then
    Else
        $aTmp_Split[0] += 1
        $aTmp_Split[$aTmp_Split[0]] = $aTest_Split[$i]
    EndIf
Next
ReDim $aTmp_Split[$aTmp_Split[0]+1]
$aTest_Split = $aTmp_Split
Ответить

Вернуться в «AutoIt»