Author Topic: Цикличность  (Read 2471 times)

0 Members and 1 Guest are viewing this topic.

Edisson

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Цикличность
« on: April 22, 2017, 02:59:27 PM »
Данный скрипт должен выполняться циклично, каждый раз получая из текстового файла строку с данными и с каждым выполнением получать следующую строку. Так должно продолжаться пока в файле не закончатся данные, но увы после одного отрабатывания процесс останавливается. Подскажите пожалуйста что я делаю не так и скажите замечания.

Code: [Select]
FOR($all=1, $all>0) //бесконечный цикл работы цикла

DBLCLICK(695,396)  // клик по полю Email
WAITMS(50)
INC($num,1) // накручиваем номер строки каждый проход

IF($num > TFCOUNT ("mail.txt"))   // если закончатся строки в файле
   HALT // стоп
END_IF

TOCLIP (TFREAD ("mail.txt", $num)) // копируем строку в буфер
WAITMS(50)
KEYDOWN (#CTRL) // Вставить
WAITMS (50)
KEYPRESS(#V)
WAITMS (50)
KEYUP (#CTRL)
WAITMS (50)
LCLICK(1168,1008)   // клик по Next
WAITMS(50)


SUB(searchok)
FOR($b=1, $b>0) //бесконечный цикл работы цикла
getscreen
IF_PIXEL_IN (1085,591, 1109,604, 14264404) // поиск синего пикселя "ОК"
lclick($_return1, $_return2)
WAITMS(500)
  END_IF
 END_CYC
END_SUB
 
    searchok() // вызываем подпрограмму searchok
 END_CYC


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Цикличность
« Reply #1 on: April 22, 2017, 04:17:21 PM »
Бесконечный цикл лучше написать так
Code: (clickermann) [Select]
WHILE(1)
  // body
END_CYC

По ошибкам:
Ты засунул описание подпрограммы SUB(searchok) в цикл, так нельзя. Описание нельзя вкладывать во что либо.
Непонятно зачем вообще эта подпрограмма но в ней у тебя бесконечный цикл из которого выхода нет.

Первый цикл не нужен так как кликер по умолчанию выполняет скрипт бесконечно.

Исправленный скрипт
Code: (clickermann) [Select]
DBLCLICK(695,396)  // клик по полю Email
WAITMS(50)
INC($num,1) // накручиваем номер строки каждый проход

IF($num > TFCOUNT ("mail.txt"))   // если закончатся строки в файле
   HALT // стоп
END_IF

TOCLIP (TFREAD ("mail.txt", $num)) // копируем строку в буфер
WAITMS(50)
KEYDOWN (#CTRL) // Вставить
WAITMS (50)
KEYPRESS(#V)
WAITMS (50)
KEYUP (#CTRL)
WAITMS (50)
LCLICK(1168,1008)   // клик по Next
WAITMS(50)

$check = 0
WHILE($check = 0) // цикл поиска ОК 
   GETSCREEN
   IF_PIXEL_IN (1085,591, 1109,604, 14264404) // поиск синего пикселя "ОК"
      $check = 1 // разрешаем выход из цикла
      LCLICK($_return1, $_return2)
      WAITMS(500)
   ELSE
      WAITMS(50)
   END_IF
END_CYC




Edisson

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: Цикличность
« Reply #2 on: April 23, 2017, 03:21:52 PM »
Огромное спасибо за помощь. Но еще осталось пару вопросов по реализации скрипта. Как реализовать в цикле поочередный поиск нужных пикселей, то есть в цикле должно поочередно отрабатываться два условия пока не появится нужный пиксель, а потом либо приступить к дальнейшему выполнению скрипта, либо записать данные из буфера в файл и уже потом приступить к дальнейшему выполнению скрипта. Код с которым не могу разобраться закомментировал для большей понятности.

Code: [Select]
DBLCLICK(695,396)  // клик по полю Email
WAITMS(50)
    INC($num,1) // накручиваем номер строки каждый проход
     
IF($num > TFCOUNT ("mail.txt"))   // если закончатся строки в файле
HALT // стоп
END_IF
     
    TOCLIP (TFREAD ("mail.txt", $num)) // копируем строку в буфер
WAITMS(50)
KEYDOWN (#CTRL) // Вставить
WAITMS (50)
KEYPRESS(#V)
WAITMS (50)
KEYUP (#CTRL)
WAITMS (50)
LCLICK(1168,1008)   // клик по Next
WAITMS(50)
     
    $check = 0
    WHILE($check = 0) // цикл поиска ОК 
   
       GETSCREEN
       IF_PIXEL_IN (1085,591, 1109,604, 14264404) // поиск синего пикселя "ОК"
          $check = 1 // разрешаем выход из цикла
          LCLICK($_return1, $_return2)
          WAITMS(2500)
       ELSE
WAITMS(1000)
       END_IF

// GETSCREEN
//      IF_PIXEL_IN (799,382, 828,398, 10526880) // поиск серого пикселя "Next"
// $check = 1 // разрешаем выход из цикла
//            Возвратить Данные из буфера обмена в конец файла"input.txt"
// LCLICK(688,64)
// WAITMS(500)
// LCLICK(713,374)
// WAITMS(2500)
//       ELSE
// WAITMS(200)
//       END_IF 
END_CYC

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Цикличность
« Reply #3 on: April 23, 2017, 05:24:14 PM »
Code: (clickermann) [Select]
DBLCLICK(695,396)  // клик по полю Email
WAITMS(50)
INC($num,1) // накручиваем номер строки каждый проход

IF($num > TFCOUNT ("mail.txt"))   // если закончатся строки в файле
   HALT // стоп
END_IF

$str = TFREAD ("mail.txt", $num)
TOCLIP ($str) // копируем строку в буфер
WAITMS(50)
KEYDOWN (#CTRL) // Вставить
WAITMS (50)
KEYPRESS(#V)
WAITMS (50)
KEYUP (#CTRL)
WAITMS (50)
LCLICK(1168,1008)   // клик по Next
WAITMS(50)

$check = 0
WHILE($check = 0) // цикл поиска ОК
   GETSCREEN
   IF_PIXEL_IN (1085,591, 1109,604, 14264404) // поиск синего пикселя "ОК"
      $check = 1 // разрешаем выход из цикла
      LCLICK($_return1, $_return2)
      WAITMS(2500)
   ELSE
      IF_PIXEL_IN (799,382, 828,398, 10526880) // поиск серого пикселя "Next"
         $check = 1 // разрешаем выход из цикла
         TFWRITE("input.txt", $str)  // Вставляем прочитанную строку в конец файла"input.txt"
         LCLICK(688,64)
         WAITMS(500)
         LCLICK(713,374)
         WAITMS(2500)
      ELSE
         WAITMS(100)
      END_IF
   END_IF
END_CYC

Edisson

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: Цикличность
« Reply #4 on: April 23, 2017, 07:50:46 PM »
Огромное спасибо за помощь! :)