Author Topic: Цикл внутри цикла  (Read 2631 times)

0 Members and 1 Guest are viewing this topic.

Родион

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Цикл внутри цикла
« on: July 05, 2019, 04:57:52 PM »
Добрый день!

Написали скрипт для формирования запросов в систему. Алгоритм запросов в эту систему всегда одинаков, меняются лишь логин-пароль, номера регистрации, и даты номеров регистрации.

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

Вопрос заключается в том, что не удаётся совместить в скрипте сразу два цикла. В момент, когда скрипт подходит к концу, он возвращается к циклу for, когда мне нужно, чтобы скрипт возвращался к циклу while.

Надеюсь доступно объяснил свою проблему, очень жду помощи.
Code: [Select]
$str = TFREAD ("LogPass.txt", 1)
$comp = STRCUT2 ($str, 1, STRPOS ($str, "/")-1)
$log = STRCUT2 ($str, STRPOS ($str, "/")+1, STRPOS ($str, ":")-1)
$pass = STRCUT2 ($str, STRPOS ($str, ":")+1, STRLEN ($str))
 
LCLICK(750,355) // клик по полю логина
WAIT (1)
TOCLIP($log) // скопировать логин в буфер
WAIT (1)
KEYDOWN (#CTRL) // вставить
WAIT (1)
KEYPRESS(#V)
WAIT (1)
KEYUP (#CTRL)
WAIT (1)
 
KEYPRESS(#TAB)
WAIT (1)
 
TOCLIP($pass) // скопировать пароль в буфер
WAIT (1)
KEYDOWN (#CTRL) // вставить
WAIT (1)
KEYPRESS(#V)
WAIT (1)
KEYUP (#CTRL)
WAIT (1)
KEYPRESS(#ENTER) // войти
WAIT(5)
 
// тут команды после входа

$filename_3 = "Date.txt"  //Имя файла
$count_3 = 1//Индекс строки

WHILE( $count_3 < TFCOUNT($filename_3) + 1 ) // Выполняем до тех пор, пока не кончатся строки

LCLICK(526,128) // "Запрос данных о НР"
WAIT(5)
LCLICK(69,189)  // "Добавить"
WAIT(5)

KEYPRESS(#TAB)
WAITMS(50)
KEYPRESS(#TAB)
WAITMS(50)
KEYSTRING(TFREAD($filename_3, $count_3))                     
KEYPRESS(#TAB)
WAITMS(50)
KEYSTRING("05072019")
 
KEYPRESS(#TAB)
WAITMS(50)
KEYPRESS(#TAB)
WAITMS(50)
KEYPRESS(#TAB)
WAITMS(50)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
KEYPRESS(#BACKSPACE)
WAIT(2)
KEYSTRING("e-mail")

LCLICK(323,238) // "По ТН"
WAIT(2)
LCLICK(380,278) // "Выпадающее меню"
WAIT(2)
LCLICK(405,312) // "Справочник"
WAIT(2)
LCLICK(861,166) // "ОК"
WAIT(5)
LCLICK(714,101) // "Поле "№ РУ"
WAIT(5)


$filename_2 = strconcat($comp, ".txt")   //Имя файла
$count_2 = 1//Индекс строки, номер РУ

FOR ($count_2, $count_2 < TFCOUNT($filename_2)) // Выполняем до тех пор, пока не кончатся строки

$RegNum = TFREAD ($filename_2, $count_2)

WAIT(3)
LCLICK(710,100) // клик по полю логина
WAIT (1)
TOCLIP($RegNum) // скопировать логин в буфер
WAIT (1)
KEYDOWN (#CTRL) // вставить
WAIT (1)
KEYPRESS(#V)
WAIT (1)
KEYUP (#CTRL)
WAIT (1)

KEYPRESS(#ENTER)
WAIT(5)
MOVE(700, 300) // Сменить местоположение для скроллинга
WHEELDOWN
WHEELDOWN
WHEELDOWN
WAIT(3)

   GETSCREEN                                   // Ищет зелёную строку
IF_PIXEL_IN(130,260, 1525,600, 14352321)
   LCLICK($_return1, $_return2-50)         
END_IF
   GETSCREEN                                   // Ищет синюю строку
IF_PIXEL_IN(130,260, 1525,600, 16436871)
   LCLICK($_return1, $_return2-50)         
END_IF     

WAIT(3)
LCLICK(853,167)
WAIT(3)
LCLICK(325,240)
WAIT(3)

KEYDOWN (#CTRL) // применить
KEYPRESS(#ENTER)
WAIT (3)
KEYPRESS(#ENTER)
WAIT(5)
LCLICK(1000,510)

INC($count_2,1)
END_CYC

INC($count_3,1)
END_CYC

HALT // Останавливаем скрипт
« Last Edit: July 05, 2019, 06:46:19 PM by Родион »

Родион

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: Цикл внутри цикла
« Reply #1 on: July 05, 2019, 06:15:17 PM »
Уважаемый Кирилл, добрый день!

Прошу пояснить Вашу позицию. Подобное уже обсуждалось где-то на форуме? Если да, попрошу навести меня.

Спасибо!

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

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Цикл внутри цикла
« Reply #2 on: July 05, 2019, 06:33:50 PM »
...В момент, когда скрипт подходит к концу, он возвращается к циклу for, когда мне нужно, чтобы скрипт возвращался к циклу while.

К какому концу? цикл фор завершится когда $count_2 станет равным или больше TFCOUNT($filename_2)

Зачем в цикле FOR INC($count_2,1)? Ведь сам цикл FOR наращивает переменную $count_2 а у тебя получается она увеличивается 2 раза каждый цикл.

Code: (clickermann) [Select]
$count_2 = 1//Индекс строки, номер РУначальное значение можно указать прямо в цикле.

При таких параметрах цикл завершится раньше чем обработает последнюю строку файла.
$count_2 < TFCOUNT($filename_2)

Для 4.13 версии можно написать так
Code: (clickermann) [Select]
FOR ($count_2=1, $count_2 <= TFCOUNT($filename_2))
Для версии ниже 4.13
Code: (clickermann) [Select]
FOR ($count_2=1, $count_2 < TFCOUNT($filename_2)+1)
В конце цикла есть KEYDOWN (#CTRL) а KEYUP (#CTRL) нет. Ctrl останется зажатым.

Родион

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: Цикл внутри цикла
« Reply #3 on: July 05, 2019, 06:45:19 PM »
Уважаемый Кирилл!

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

Добрый день, уважаемые коллеги!
коллега — это человек, с которым вы вместе работаете.
Таким обращением, вы замазываете форумчан в своих однозначно преступных действиях, превращая в соучастников.
Используем программу для формирования автоматизированных запросов в одну государственную систему. Алгоритм запросов в эту систему всегда одинаков, меняются лишь логин-пароль, номера регистрации, и даты номеров регистрации.
здесь , вы уведомляете о совершении коллективных противоправных действий, заведомо направленных на подрыв работы государственных органов.
Каждый, кто окажет вам помощь, независимо от его личного гражданства, становится преступником, так как такое необычное вступление написано совсем не просто так и на других площадках встречал подобную задачу неоднократно. Понимаю, что вы служащие подневольные и что прикажут, то и выполняете, но  удалите эту тему здесь и выслуживайтесь в других местах, интернет большой, тех кто клюёт на такие предложения, всегда хватало, так что без куска хлеба не останетесь.


Родион

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: Цикл внутри цикла
« Reply #4 on: July 05, 2019, 07:05:02 PM »
Добрый день!

Благодарю за наводки на ошибку в коде. Но основная задача решена не была.

Под "концом" подразумевалась строка
Code: [Select]
LCLICK(1000,510).
После исполнения этой команды хотелось бы, чтобы скрипт начинал работу с момента:

Code: [Select]
LCLICK(526,128) // "Запрос данных о НР"
WAIT(5)
LCLICK(69,189)  // "Добавить"
WAIT(5)

И отрабатывал все команды дальше. Брал уже следующую строку из файла Date.txt и следующую строку из $filename_2

...В момент, когда скрипт подходит к концу, он возвращается к циклу for, когда мне нужно, чтобы скрипт возвращался к циклу while.

К какому концу? цикл фор завершится когда $count_2 станет равным или больше TFCOUNT($filename_2)

Зачем в цикле FOR INC($count_2,1)? Ведь сам цикл FOR наращивает переменную $count_2 а у тебя получается она увеличивается 2 раза каждый цикл.

Code: (clickermann) [Select]
$count_2 = 1//Индекс строки, номер РУначальное значение можно указать прямо в цикле.

При таких параметрах цикл завершится раньше чем обработает последнюю строку файла.
$count_2 < TFCOUNT($filename_2)

Для 4.13 версии можно написать так
Code: (clickermann) [Select]
FOR ($count_2=1, $count_2 <= TFCOUNT($filename_2))
Для версии ниже 4.13
Code: (clickermann) [Select]
FOR ($count_2=1, $count_2 < TFCOUNT($filename_2)+1)
В конце цикла есть KEYDOWN (#CTRL) а KEYUP (#CTRL) нет. Ctrl останется зажатым.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Цикл внутри цикла
« Reply #5 on: July 05, 2019, 07:20:44 PM »
И отрабатывал все команды дальше. Брал уже следующую строку из файла Date.txt и следующую строку из $filename_2

Так нафига ж там вообще этот цикл если он не нужен? Удали его нафиг и замени $count_2 на $count_3
Code: (clickermann) [Select]
$RegNum = TFREAD ($filename_2, $count_2)