1 (изменено: Botsy, 2020-09-08 00:58:26)

Тема: AHK: Как выполнить действие в цикле, каждые n раз. Переменная A_index

Доброго всем!

Как можно выполнить определенное действие в цикле, если цикл уже сделан N раз ?


Loop
{
	Loop
	{
		....
		if 
			{
				Если этот IF сделан больше N раз, выходим из этого цикла и возвращаемся к главному циклу
			{
		else
			{
				....
			}
	}
}

Если в if добавить


If A_index >8 
break

то мы действительно выйдем из внутреннего цикла и вернемся к главному циклу, а когда опять попадём в внутренний цикл и в условие if, то мы сразу выйдем из этого цикла, а не через очередных 8 итераций. Потому что на тот момент, переменная A_index уже будет больше 8

2

Re: AHK: Как выполнить действие в цикле, каждые n раз. Переменная A_index

А вы пробовали?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

3

Re: AHK: Как выполнить действие в цикле, каждые n раз. Переменная A_index

teadrinker я уже решил проблему другим способом: добавить переменную перед нужным циклом, в блоке if проверять на количество "раз", а после блока увеличивать и перезаписывать эту переменную на +1.


loop
{
	Counter:= 0
		loop
		{
			if Counter > N
				{
					Break
				}
			Counter += 1
		}
}

4

Re: AHK: Как выполнить действие в цикле, каждые n раз. Переменная A_index

Botsy, но зачем?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

5 (изменено: Botsy, 2020-09-08 21:35:28)

Re: AHK: Как выполнить действие в цикле, каждые n раз. Переменная A_index

teadrinker вообще логика была такая: проверяем блок if, если условие выполняется - то делаем это, а если нет - то делаем другое. Все работало, но так как это было в бесконечном цикле, бывало что одно из условий выполнялось чаще, чем мне хотелось. Я подумал можно ли сделать так, что например, если условие выполняется больше N раз, мы выходим из "внутреннего" цикла.

С переменной A_index - не получилось, потому что на очередном входе в внутренний цикл, эта переменная не обновлялась до 0. И как это сделать я не знал. Поэтому нашлось вот такое решение с обычной, новой переменной.

6

Re: AHK: Как выполнить действие в цикле, каждые n раз. Переменная A_index

Botsy пишет:

эта переменная не обновлялась до 0

A_Index с каждым новым началом цикла начинается с одного. Добавьте MsgBox % A_Index во внутренний цикл, чтобы это увидеть.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

7

Re: AHK: Как выполнить действие в цикле, каждые n раз. Переменная A_index

teadrinker вот блин, реально обновляется... Значит у меня была где-то в другом месте ошибка, из-за которой я думал, что она не обновляется... Спасибо за информацию

8

Re: AHK: Как выполнить действие в цикле, каждые n раз. Переменная A_index

Как сделать, чтобы на витке 5, 6, 7, 8 — цифры показывали 5 201 — 4 раза? —

n := 0
loop
{
   Index := A_Index

   msgbox %Index%`n%n%

   If (Index = 5) or  (Index = 6) or  (Index = 7) or  (Index = 8)
   {
         Index := A_Index - 1
         continue
   }

   If Index = 1
      n+=50+1
   Else
      n+=50
}
return

9 (изменено: __Михаил__, 2020-09-14 00:11:03)

Re: AHK: Как выполнить действие в цикле, каждые n раз. Переменная A_index

DD

Непонятна сама суть цели, что требуется конкретно. Ведь таким макаром можно просто внутри цикла ещё один добавить с отображением просто текста без учёта какой там индекс в основном цикле.

F2::
n := 0
loop
{
 Index := A_Index
 MsgBox %Index%`n%n%

 If Index in 5,6,7,8
 {
  If !L
   L := n
  Loop 3
  {
   MsgBox %Index%`n%L%
  }

  Continue
 }
 If Index = 1
	n += 50+1
 Else
	n += 50
}
Return
+ DD

10

Re: AHK: Как выполнить действие в цикле, каждые n раз. Переменная A_index

Уважаемые камрады. Вопрос той же тематики

key1:
   loop 300 {
      ImageSearch, Px, Py, 0, 0, 0, 0, % "*230 " ArrW[1] KeysList ++KeysList[A_Index] ".png"
      if !ErrorLevel {
        Sendinput, {e}
        KeysList := [0]
      }
   goto, key2
 }
   return

подскажите как сделать проверку, если значение больше 300 то сбросить сбросить "переменную", или же делать проверку до запуска цикла на условия поиска и сброс перед циклом.

11

Re: AHK: Как выполнить действие в цикле, каждые n раз. Переменная A_index

Больше конкретики, пожалуйста.

GoodLuck пишет:

если значение больше 300

Какое значение?

GoodLuck пишет:

то сбросить сбросить "переменную"

Какую переменную?

Ваша запись показывает следующее:

Вход в подпрограмму "key1".
Объявление цикла на 300 итераций.
Поиск картинки с динамически-составляемым путём к ней, в котором, в одном из случаев идёт обращение к массиву с данными, как к строковой переменной, в координатах 0:0, в области 0:0.
Объявление условия, которое всегда выполняется.
Нажать клавишу "е".
Присваивание "KeysList" массива с единственным членом, равным нулю.
Выход из подпрограммы, прямо из тела цикла.

Возможно, Вам понятно, что тут происходит, но со стороны это выглядит довольно абсурдно.

12 (изменено: GoodLuck, 2020-09-15 00:19:06)

Re: AHK: Как выполнить действие в цикле, каждые n раз. Переменная A_index

KusochekDobra Спасибо за ответ.
зачем весь код скидывать смысл, предположим у меня есть 300 итерации , есть 300 картинок в разных ракурсах по градусам и цвету. Мне нужно, чтобы при достижении значения в массиве из одного данного if KeysList = 300 или count > 300 обновлялось значение переменной до 0 с условиями, предположим что подпрограмма зациклена сама на себя. Просто я не знаю как правильно, это написать пробовал протестировать через Msgbox не получилось. Область поиска 720, 840, 820, 920. Просто получается, если он не находит значение он продолжает увеличивать число, если я добавляю картинку во время работы скрипта без остановки значение уйдет выше 300, что не даст мне понять отработает ли поиск или нет в моем примере в последующем использовании.

13 (изменено: __Михаил__, 2020-09-16 19:37:34)

Re: AHK: Как выполнить действие в цикле, каждые n раз. Переменная A_index

GoodLuck

Ка минимум исправьте:

ImageSearch, Px, Py, 0, 0, A_ScreenWidth, A_ScreenHeight

Иначе находить не будет.

14

Re: AHK: Как выполнить действие в цикле, каждые n раз. Переменная A_index

GoodLuck пишет:

зачем весь код скидывать смысл, предположим у меня есть

Была упомянута конкретика, а не весь код. Если не хотите показывать свою поделку, вынесите "проблемную" логику в отдельный файл, который наглядно продемонстрирует ожидаемое поведение вместе с тем, что у Вас не получается.

То, что Вы предлагаете к рассмотрению — инвалид в каждой строке. Из этого нежизнеспособного примера возможно понять только то, что если у Вас весь код так организован, то скорее всего проблема не в каком-то конкретном месте, а повсеместно.

GoodLuck пишет:

300 итерации , есть 300 картинок в разных ракурсах по градусам и цвету. Мне нужно, чтобы при достижении значения в массиве из одного данного if KeysList = 300 или count > 300 обновлялось значение переменной до 0 с условиями, предположим что подпрограмма зациклена сама на себя. ...

Вы хоть читаете, что пишете, или это просто поток сознания?
Не торопитесь. Правильно поставленный вопрос == половина решения. Вам не могут ответить, потому что не могут понять.