1 (изменено: max01, 2012-08-12 15:50:35)

Тема: AHK: Сложные манипуляции с текстом

В общем нужен скрипт который бы сканировал .txt документ на предмет определённого текста, а точнее на примеры типа: 5+5=?, 6+8=? в диапазоне от 0до 1000 . Далее при обнаружении выполнял решение примера и результат выводил в функцию

Send, {F6}результат{enter}

2

Re: AHK: Сложные манипуляции с текстом

F12::
FileRead, F, example.txt
loop {
   RegExMatch(F, "O)(\d+)\+(\d+)", rez, rez.pos(1) ? rez.pos(1)+5 : 1)
   if !rez.Count()
      break
   sum := rez[1]+rez[2]
   Send, {F6}%sum%{Enter}
}
ExitApp

3

Re: AHK: Сложные манипуляции с текстом

Irbis
Большое спасибо! Вы очень помогли.

4

Re: AHK: Сложные манипуляции с текстом

Ещё вопрос: как сделать что бы скрипт сканировал txt непрерывно каждые 5 секунд?

5 (изменено: Irbis, 2012-08-12 23:02:03)

Re: AHK: Сложные манипуляции с текстом

Сканирует файл на наличие нового текста, и парсит только его, а не весь файл.
Если, что маловероятно, нужно заново проходить весь файл, то pos := 1 поместить следующей строкой после FileRead, F, %Name%

Name = example.txt
pos := 1
F12::
loop {
   FileRead, F, %Name%
   loop {
      RegExMatch(F, "O)(\d+)\+(\d+)\=\?", rez, pos)
      if !rez.Count()
         break
      sum := rez[1]+rez[2]
	  pos := rez.pos(1)+5
      Send, {F6}%sum%{Enter}
   }
   FileGetSize, old_s, %Name%
   new_s := old_s
   while old_s = new_s {
      sleep 5000
      FileGetSize, new_s, %Name%
   }
}
#F12:: ExitApp ; Win+F12 - выход

6

Re: AHK: Сложные манипуляции с текстом

Irbis
То что нужно Большое спасибо!

7

Re: AHK: Сложные манипуляции с текстом

Прошу помощи в оптимизации скрипта. Мне нужен скрипт который бы нажимал определённые клавиши рандомное количество рас  с интрервалом от 3 до 5 рас. Так же рандомное длительность нажатия (от 1 до 2 секунд ) и промежуток времени между нажатиями (от 5 до 10 секунд). Цикл нажатий клавиш от 3 до 8 нажатий после чего скрипт выполнял действие, а именно сворачивал окно тоже на рандомное количество времени от 1 до 2.5 минут, затем повторял цикл.
У меня реализовать такой скрипт не получилось, я соорудил из нескольких скриптов цепочку которые включают и выключают друг друга, но они глючат и не работают как надо .
Ещё нюанс встроить в скрипт этот код, что бы он пока открыто окно работал, а при свёрнутом нет. Плюс доработать этот код добавив шаблоны типа (\d+)\-(\d+), (\d+)\*(\d+), (\d+)\/(\d+) соответственно и работа с шаблонами вычитание, умножение, деление.

WinWaitActive, GTA:SA:MP
Name = C:\Users\max\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
pos := 1
loop {
   FileRead, F, %Name%
   loop {
      RegExMatch(F, "O)(\d+)\+(\d+)", rez, pos)
      if !rez.Count()
         break
      sum := rez[1]+rez[2]
      pos := rez.pos(1)+5
      Send, {F6}%sum%{Enter}
   }
   FileGetSize, old_s, %Name%
   new_s := old_s
   while old_s = new_s {
      sleep 5000
      FileGetSize, new_s, %Name%
   }
}
#F12:: ExitApp ; Win+F12 - выход

Буду очень признателен за скрипт.

8

Re: AHK: Сложные манипуляции с текстом

Вот код на 4 арифметических действия (деление - целочисленное), остальное не очень понял.

SetFormat, float, 0.0
Name = example.txt
pos := 1
F12::
loop {
   WinWaitActive, GTA:SA:MP
   FileRead, F, %Name%
   loop {
      RegExMatch(F, "O)(\d+)(\+|-|\*|/)(\d+)\=\?", rez, pos)
      if !rez.Count()
         break
      sign := rez[2]
      ans := sign = "+" ? rez[1]+rez[3]
	       : sign = "-" ? rez[1]-rez[3]
	       : sign = "*" ? rez[1]*rez[3]
	       : rez[1]/rez[3]
      pos := rez.pos(1)+5
	  Send, {F6}%ans%{Enter}
   }
   FileGetSize, old_s, %Name%
   new_s := old_s
   while old_s = new_s {
      sleep 5000
      FileGetSize, new_s, %Name%
   }
}
#F12:: ExitApp ; Win+F12 - выход

9

Re: AHK: Сложные манипуляции с текстом

Irbis пишет:

остальное не очень понял. :/

У меня это скрипт выглядит так:
Нажимает кнопки, затем работает с окном и запускает следующий.

SetKeyDelay, 2000, 1000
SetTimer, Timer1, 90000
Timer1:

Send,{vk57}{vk53}{vk41}{vk44}{vk57}{vk53}{vk41}{vk44}{vk57}{vk53};wsad


WinWait, GTA:SA:MP
WinMinimize ; Использует окно, найденное выше.

Run, C:\Skript's\Anti [AFK]\3.ahk
exit

следущий:

Sleep 100200
WinWait, GTA:SA:MP
WinMaximize ; Использует окно, найденное выше.
Run, C:\Skript's\Anti [AFK]\1(3).ahk
exit

И так по кругу.... У меня не получается сделать цельный скрипт и сделать значения SetKeyDelay, 2000, 1000
SetTimer, Timer1, 90000 рандомными и в определённом диапазоне.

10

Re: AHK: Сложные манипуляции с текстом

up

11

Re: AHK: Сложные манипуляции с текстом

Задать произвольный диапазон:

SetKeyDelay, rand(1000, 2000), rand(500, 2000)
SetTimer, Timer1, % rand(30000, 150000)
return

rand(A, B)
{
 Random, r, A, B
 return r
}

12 (изменено: max01, 2012-08-14 22:54:44)

Re: AHK: Сложные манипуляции с текстом

Irbis пишет:

Задать произвольный диапазон:

SetKeyDelay, rand(1000, 2000), rand(500, 2000)
SetTimer, Timer1, % rand(30000, 150000)
return

rand(A, B)
{
 Random, r, A, B
 return r
}

а куда вставить?

Send,{vk57}{vk53}{vk41}{vk44}{vk57}{vk53}{vk41}{vk44}{vk57}{vk53};wsad

WinWait, GTA:SA:MP
WinMinimize

и  cделать что бы скрипт повторялся постоянно....

13

Re: AHK: Сложные манипуляции с текстом

Не стал сливать все в один скрипт, хоть это и несложно. (Не очень красиво, но работает)
Оставил два скрипта - управляющий с постоянным циклом и подчиненный ему parse.ahk, производящий подсчет.
Главный управляет подчиненным - одновременно со сворачиванием/разворачиванием окна игры посылает ему хоткей на стоп/пуск (Ctrl+Shift+F12)
Главный скрипт main.ahk:

Run, C:\Skript's\Anti [AFK]\parse.ahk ; Загрузка скрипта, производящий операции над текстовым файлом - изначально на паузе
F12:: ; Запуск главного скрипта
loop {
   Send ^+{F12} ; запуск parse.ahk
   SetKeyDelay, rand(500, 1000), rand(500, 1000)
   waiting := rand(5000, 10000) ; интервал между повторами 5-10 cек.
   loop % rand(3,5) { ; количество повторов
      Send,{vk57}{vk53}{vk41}{vk44}{vk57}{vk53}{vk41}{vk44}{vk57}{vk53} ;wsad
      sleep waiting
   }
   Send ^+{F12} ; ; стоп parse.ahk
   WinWait, GTA:SA:MP
   WinMinimize
   sleep % rand(60000, 150000)
   WinWait, GTA:SA:MP
   WinMaximize
   sleep 200 ; даем окну развернуться
}
return

rand(A, B)
{
 Random, r, A, B
 return r
}

~#F12:: ExitApp ; Win+F12 - выход

Подчиненный скрипт parse.ahk:

Name = example.txt
SetFormat, float, 0.0
pos := 1
pause
loop {
   FileRead, F, %Name%
   loop {
      RegExMatch(F, "O)(\d+)(\+|-|\*|/)(\d+)\=\?", rez, pos)
      if !rez.Count()
         break
      sign := rez[2]
      ans := sign = "+" ? rez[1]+rez[3]
           : sign = "-" ? rez[1]-rez[3]
           : sign = "*" ? rez[1]*rez[3]
           : rez[1]/rez[3]
      pos := rez.pos(1)+5
      Send, {F6}%ans%{Enter}
   }
   FileGetSize, old_s, %Name%
   new_s := old_s
   while old_s = new_s {
      sleep 5000
      FileGetSize, new_s, %Name%
   }
}
#F12:: ExitApp ; Win+F12 - выход
^+F12:: pause, toggle

14 (изменено: max01, 2012-08-15 00:31:45)

Re: AHK: Сложные манипуляции с текстом

Irbis
Очень благодарен за помощь! Если не откажитесь вышлю вознаграждение пришлите rub webmoney в личку.