Показать полную графическую версию : Изменение счётчика итераций цикла
Привет.
Допустим, у меня есть некий цикл, он работает, как нужно, но в определённый момент, мне нужно изменить количество итераций цикла.
Из вне. Из другой функции.
Возможно ли такое в принципе?
$Arr = 7
For $i = 0 To $Arr
MsgBox(0, "111", $i)
; If $i = 3 Then ExitLoop
Next
Func _bbb()
;И отсюда, по некому событию я хочу изменить $Arr
EndFunc
Изменить $Arr. Хоть, прибавить, хоть убавить.
Как такое реализовать?
Всегда выдаётся ошибка, что массив имеет неправильное количество индексов.
Я думал про ReDim, но как не крутил, ничего не получилось.
Для примера, я хочу, чтобы было не 7, а 12 итераций.
Всегда выдаётся ошибка, что массив имеет неправильное количество индексов.»
Не вижу у вас массива.
Изменить количество итераций можно как-то так, например
#NoTrayIcon
Local $iCount = 1, $iMax = 7
HotKeySet("{F2}", "_bbb")
While 1
If $iCount = $iMax Then ExitLoop
MsgBox(0, "111", $iCount)
$iCount += 1
Sleep(10)
WEnd
Func _bbb()
$iMax = 12
EndFunc ;==>_bbb
Я не стал писать про массив, потому что массив мне возвращает некоторую цифру (через UBound).
Т.е., это всего лишь цифра, которую мне нужно изменить, при появлении некоторого события.
oz84, а можно ли это реализовать через For To Next?
Дело в том, что мой скрипт очень сложен, и я от этого цикла получаю не только его тело, но и его индекс,
который используется в других местах скрипта.
Паразит, тут идексом будет $iCount, такой же счётчик, как и $i (только если $i = 0, то количество итераций будет 8, а не 7). Извиняюсь, в последнее время чаще был удобен бесконечный цикл с выходом по условию, ну и написал по привычке...
Можно и в For, только нужно добавить проверку, что не выходите за пределы размера массива, до того, как получить из него некоторую цифру. Т.е. предусмотреть в скрипте ошибку, тогда до обработчика ошибок самого AutoIt дело и не дойдёт.
Получается, что переменная StopValue читается только при первом проходе.
Вывод:
Через For To Next реализовать такое невозможно.
oz84, спасибо Вам за помощь.
мой скрипт очень сложен, и я от этого цикла получаю не только его тело, но и его индекс,
который используется в других местах скрипта. »
Это изначально неверный подход.
Что касается проверки массива, не вижу тут проблемы:
$i = 0
$Arr = 7
Dim $aArray[$Arr]
Do
MsgBox(0, "111", $i)
If $i < UBound($aArray) Then
;Some action with the array ($aArray[$i])
ConsoleWrite($aArray[$i] & @CRLF)
EndIf
If $i = 3 Then
_bbb()
EndIf
$i += 1
Until $i = $Arr
Func _bbb()
$Arr = 12
EndFunc
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC