Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Изменение счётчика итераций цикла

Ответить
Настройки темы
Изменение счётчика итераций цикла

Аватара для Паразит

Пользователь


Сообщения: 68
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Паразит
Дата: 23-05-2017
Привет.

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


Код: Выделить весь код
$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 итераций.

Отправлено: 10:16, 23-05-2017

 

Старожил


Сообщения: 168
Благодарности: 40

Профиль | Отправить PM | Цитировать


Цитата Паразит:
Всегда выдаётся ошибка, что массив имеет неправильное количество индексов.»
Не вижу у вас массива.

Изменить количество итераций можно как-то так, например
Код: Выделить весь код
#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

-------
ОЗ

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:28, 23-05-2017 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Паразит

Пользователь


Сообщения: 68
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я не стал писать про массив, потому что массив мне возвращает некоторую цифру (через UBound).
Т.е., это всего лишь цифра, которую мне нужно изменить, при появлении некоторого события.


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

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

Последний раз редактировалось Паразит, 23-05-2017 в 13:00.


Отправлено: 12:48, 23-05-2017 | #3


Старожил


Сообщения: 168
Благодарности: 40

Профиль | Отправить PM | Цитировать


Паразит, тут идексом будет $iCount, такой же счётчик, как и $i (только если $i = 0, то количество итераций будет 8, а не 7). Извиняюсь, в последнее время чаще был удобен бесконечный цикл с выходом по условию, ну и написал по привычке...

Можно и в For, только нужно добавить проверку, что не выходите за пределы размера массива, до того, как получить из него некоторую цифру. Т.е. предусмотреть в скрипте ошибку, тогда до обработчика ошибок самого AutoIt дело и не дойдёт.

-------
ОЗ

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:17, 23-05-2017 | #4


Аватара для Паразит

Пользователь


Сообщения: 68
Благодарности: 0

Профиль | Отправить PM | Цитировать


Получается, что переменная StopValue читается только при первом проходе.

Вывод:

Через For To Next реализовать такое невозможно.

oz84, спасибо Вам за помощь.

Последний раз редактировалось Паразит, 23-05-2017 в 15:12.


Отправлено: 14:41, 23-05-2017 | #5


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


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

Что касается проверки массива, не вижу тут проблемы:

Код: Выделить весь код
$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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:09, 25-05-2017 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Изменение счётчика итераций цикла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Разное количество итераций с одным(почти) и тем же условием crashtuak Программирование и базы данных 2 05-07-2012 14:39
Разное - Остановка счётчика триальной программы или восстановление её работы beowulf0208 Microsoft Windows 7 1 14-03-2011 12:41
CMD/BAT - [решено] Пакетное переименование с использованием алфавитного счётчика kotik147 Скриптовые языки администрирования Windows 6 13-05-2010 00:03
HP Deskjet D4363 сброс счётчика shponder Хочу все знать 0 22-01-2010 19:21




 
Переход