Что нового

Изменение счётчика итераций цикла

Сообщения
60
Репутация
-2
Привет.

Допустим, у меня есть некий цикл, он работает, как нужно, но в определённый момент,
мне нужно изменить количество итераций цикла.
Из вне. Из другой функции.
Возможно ли такое в принципе?

Код:
$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 итераций.
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Код:
$endcount = 3
$i = 0

While $i <= $endcount
	ConsoleWrite($i & @CRLF)
	$i = $i + 1
WEnd
 
Автор
Parazit
Сообщения
60
Репутация
-2
Дело в том, что я получаю переменную $Arr, из массива через UBound.
Т.е., это обычная цифра, которую мне надо изменять при появлении некоего события.

hedji, а возможно ли это реализовать через For To Next?


Дело в том, что мой скрипт очень сложен, и я от этого цикла получаю не только его тело, но и его индекс,
который используется в других местах скрипта.
 

pvnn

Осваивающий
Сообщения
305
Репутация
32
а возможно ли это реализовать через For To Next?

Вот что написано в справке:
If stepVal or stop is a variable, its value is only read the first time the loop executes.
Если stepVal или stop - переменная, ее значение читается только при первом выполнении цикла.

Так что это невозможно реализовать через For/Next
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Если $Arr, из массива через UBound, то $i как бы и есть индекс.
Код скрипта покажите, быстрее поймем друг друга.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Через "Do....Until" не устроит ?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Parazit [?]
мне нужно изменить количество итераций цикла.

Код:
Global $iTmp = 0, $iArr = 7
HotKeySet('{ESC}', '_Exit')
AdlibRegister('_bbb')

While 1
   _For()
   Sleep(1000)
WEnd


Func _bbb()
   $iArr = Random(1, 25, 1)
EndFunc ;==>_bbb

Func _For()
   For $i = 0 To $iArr
	  ConsoleWrite(StringFormat('> $i = %s To %s\n', $i, $iArr))
   Next
EndFunc ;==>_For

Func _Exit()
   AdlibUnRegister('_bbb')
   Exit
EndFunc ;==>_Exit
 
Верх