Что нового

[Данные, строки] Как составить цикл?

modnik

Знающий
Сообщения
138
Репутация
13
Код:
$orders =5
dim $s[$orders]
$c = 0
for $i= $c to $orders
   $n = ControlListView("[TITLE:EVE ;]", _
   "","WindowsForms10.SysListView32.app.0.378734a1", "Finditem" , $s[$c])
   $d= PixelGetcolor(x,y)
   ;if $d=17658687  ;здесь нужно заново начать цикл,только чтобы с не изменилось, также не изменилось номер повторения
 
   $c = $c+1
Next


Массив
$s содержит 5 букв A B C D E
$n поочерёдно возвращает номер строки, под которым значиться буква

Допустим в данный момент цикл идёт 3 раз, тогда $c=2, $n вернёт номер строки. И тут выполняется условие, что $d=17658687, в этом случае нужно начать цикл сначала, т.е, чтобы $c=2 и цикл снова шёл 3 раз
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 579
Репутация
934
Раз 15 перечитал, так и не понял что тебе надо, мб то что спать уже пора. Ты хочешь чтобы просканировав ордера и найдя какое-то совпадение, было выполнено какое-то действие и далее цикл продолжил сканировать с того места где прервался? о_О
 
Автор
M

modnik

Знающий
Сообщения
138
Репутация
13
Мне нужно чтобы цикл ещё раз прошёлся(выполнил команды, которые были до if $d=17658687 ) по тому элементу на котором прервался.


Добавлено:
Сообщение автоматически объединено:

Допустим в данный момент цикл идёт третий раз, тогда $c=2, $n вернёт номер строки. И тут выполняется условие, что $d=17658687, в этом случае нужно начать цикл сначала, т.е, чтобы $c=2 и цикл снова шёл 3 раз. И если в этот раз не выполниться условие$d=17658687, то цикл продолжился бы дальше
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Используй цикл не for а While...WEnd - там со счётчиком цикла можно делать что угодно внутри цикла.

Навскидку
Код:
$orders =5
dim $s[$orders]
$c = 0
$i=0
While $i<= $orders
   $n = ControlListView("[TITLE:EVE ;]", _
   "","WindowsForms10.SysListView32.app.0.378734a1", "Finditem" , $s[$c])
   $d= PixelGetcolor(x,y)
   if $d<>17658687 then ;здесь нужно заново начать цикл,только чтобы с не изменилось, также не изменилось номер повторения
    $c = $c+1
    $i+=1
   endif
WEnd

"Чтобы не изменилось с" - ну с я увидел. "и номер повторения" - узнать бы ещё в какой переменной этот номер у тебя... :smile:

И ещё я бы рекомендовал всем использовать шестнадцатиричные представления цвета, если вы хоть чуть-чуть разбираетесь в фотошопе или чём-то таком. Проще представлять цвет, уж оттенки серого - так уж точно.

UPD. Изменил код. Понял, что цикл должен пройти ещё раз при том же значении счётчика, а не начаться заново с нуля. Блин... Вот не прикольно когда одними понятиями разные люди обозначают разные вещи.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 579
Репутация
934
ContinueLoop - Этот оператор тибе поможет. В сумме я потратил пожалуй пол часа чтобы проникнуться идеей твоего вопроса

Код:
For $i = 1 to 10
    If $i = 7 Then ContinueLoop
    MsgBox(0, "The value of $i is:", $i)
Next

Выведет в мсгбокс числа с 1 по 10 минуя 7
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Не, Бел. Ему при совпадении надо начать итерацию цикла заново. While подходит идеально. Пусть почитает, осознает, и сам решит, как и чего надо сделать, раз уж не может так обьяснить требуемое чтобы все сразу точно поняли что требуется 8)

Вообще как-то непонятно цикл первоначальный сделан... Почему $s[$c] а не $s[$i] ? Тогда и с не нужно было бы...
Ничего не понимаю... Ладно, смотреть предыдущий пост.
 
Автор
M

modnik

Знающий
Сообщения
138
Репутация
13
Код:
$orders =5
dim $s[$orders]
$error =0
$c = 0
While $c<= $orders
   $n = ControlListView("[TITLE:EVE ;]", _
   "","WindowsForms10.SysListView32.app.0.378734a1", "Finditem" , $s[$c])
   $d= PixelGetcolor(x,y)
   if $d<>17658687 and $error <1 then 
   ContinueLoop
   $error=$error+1
   endif
Send("Hello world")
$c = $c+1
WEnd


Вот теперь это то, что нужно

О боги, теперь только нужно как то обнулить переменную $error, дляя других элементов
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Код:
$orders =5
dim $s[$orders]
$error =0
$c = 0
While $c<= $orders
   $n = ControlListView("[TITLE:EVE ;]", _
   "","WindowsForms10.SysListView32.app.0.378734a1", "Finditem" , $s[$c])
   $d= PixelGetcolor(x,y)
   if $d=17658687 and $error <1 then
    $error=1 ; цвет тот, это ошибка, проверим то же самое ещё разок, но не более
   else
    $c = $c+1 ; цвет не тот, всё в порядке, проверяем следующий итем
   endif
Send("Hello world")
WEnd


Ты так и не понял... То что ты показал в первом посте и что в последнем - действия РАЗНЫЕ.
В моём первом примере счётчик цикла увеличивается, если цвет не тот. В твоём последнем, если цвет не тот, ты переходишь к началу новой итерации цикла без увеличения счётчика, и даже не изменяя переменную $error, и получается бесконечный цикл по идее.

Использовать еррор для других элементов списка?
Код:
$orders =5
dim $s[$orders]
$error =-1
$c = 0
While $c<= $orders
   $n = ControlListView("[TITLE:EVE ;]", _
   "","WindowsForms10.SysListView32.app.0.378734a1", "Finditem" , $s[$c])
   $d= PixelGetcolor(x,y)
   if $d=17658687 and $error <> $c then
    $error=$c ; цвет тот, это ошибка, проверим то же самое ещё разок, но не более
   else
    $c = $c+1 ; цвет не тот, всё в порядке, проверяем следующий итем
   endif
Send("Hello world")
WEnd

Просто пишем в еррор как раз номер последнего элемента, для которого нашли ошибку.
 
Автор
M

modnik

Знающий
Сообщения
138
Репутация
13
Код:
$orders =5
dim $s[$orders]
$error =-1
$c = 0
While $c<= $orders
   $n = ControlListView("[TITLE:EVE ;]", _
   "","WindowsForms10.SysListView32.app.0.378734a1", "Finditem" , $s[$c])
   $d= PixelGetcolor(x,y)
   if $d=17658687 and $error <> $c then
    $error=$c ; цвет тот, это ошибка, проверим то же самое ещё разок, но не более
   else
    $c = $c+1 ; цвет не тот, всё в порядке, проверяем следующий итем
   endif
Send("Hello world")
WEnd


Вот теперь всё идеально! И изначально мне нужно было сделать как раз без увеличения счетчика. Кстати тот код,который я написал последним тоже верный для одного элемента, только увеличения еррор нужно ставить перед ContinueLoop. Но тот, что ты запостил вконце и есть желаемое! Один из двух последних штрижков в моём боте(проверка на правильность действий)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 579
Репутация
934
Отметь тему решенной.
 

swg

Новичок
Сообщения
8
Репутация
0
"WindowsForms10.SysListView32.app.0.378734a1" что это? как на него посмотреть? Еще лучше как на него вышли?
 
Верх