1 (изменено: Alex_Matpocob, 2013-08-07 15:42:27)

Тема: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

Доброго времени суток. Я играю на одном из многочисленных серверов samp и хотел бы немного разобраться в одном вопросе. У меня возникла мысль, что используя Autohotkey можно создать скрипт выуживающий для меня определенную информацию из текстового файла (фиксирующего события на сервере) и вывести эти данные в чат игры.

Сам текстовый файл находится в:
C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\chatlog.txt

Собственно меня интересует поиск текстовых строк вида:
[12:53:46] WANTED:{6495ED} [ID 66] Jonsen_Delabor был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Kenny_Bush
[14:23:55] WANTED:{6495ED} [ID 66] Jonsen_Delabor был обвинен в: Угон ТС [2 зв] Доложил:{ffffff} Edgar_Goover

Задумка заключается в следующем. При вводе в игровой чат имени игрока с определенным префиксом ... скажем:
? Jonsen_Delabor{enter}

Скрипт сканирует содержимое файла chatlog.txt и в случае нахождения в одной строке слов "WANTED" и введенного мною имени "Jonsen_Delabor" выводит в чат игры: "Отметку времени" "Причину по которой игрок объявлен в розыск" "Имя того, кто подал жалобу или объявил игрока в розыск".

Тоесть. Я ввожу в чат:
? Jonsen_Delabor

А потом в чат выводится сообщение:
[12:53:46] Убийство человека :: Kenny_Bush
[14:23:55] Угон ТС :: Edgar_Goover

Насколько я понимаю тут надо уметь работать с чтением файлов, присвоением текстовым переменным части из определенных строк, текстовыми массивами ... и каким-то образом научить скрипт отлавливать ввод в чат префикса и искомого имени. Вот тут я совсем зашел в тупик. Не найдется ли тут человека, знакомого с сетевым режимом игры в GTA San Andreas?

Я подозреваю, что отслеживать свой запрос ...можно все по тому же чатлог-файлу. Скажем задав старт фильтра на определенное сочетание клавишь, проводить чтение с конца файла ... натыкаться на строку введенную мною же...
[12:58:51] Alex_Matpocob сказал: ? Jonsen_Delabor  и таким образом задавать искомое имя в определенную переменную.

2 (изменено: Alex_Matpocob, 2013-08-07 16:12:24)

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

Удалось разобраться как сортировать сообщения о совершении преступлений в отдельный txt-файл:


F2::
{
Loop, read, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\chatlog.txt, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\WANTED.txt
{
    IfInString, A_LoopReadLine, WANTED, FileAppend, %A_LoopReadLine%`n
} 
}
return

Теперь бы еще из этой каши, научиться выдергивать информацию по отдельному игроку и выводить её в чат...

+ открыть спойлер

[12:53:46] WANTED:{6495ED} [ID 66] Jonsen_Delabor был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Kenny_Bush
[12:53:46] WANTED:{6495ED} [ID 298] Franki_Gym был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} AUTORCRIME
[12:53:46] WANTED:{6495ED} [ID 90] Roman_ionihiev был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Kiribok
[12:53:46] WANTED:{6495ED} [ID 168] Jek_Pook был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Roman_ionihiev
[12:58:59] WANTED:{6495ED} [ID 129] Kiribok был обвинен в: баг [1 зв] Доложил:{ffffff} Cesa[R]
[13:03:40] WANTED:{6495ED} [ID 24] Victor_Golubev был обвинен в: уклон [2 зв] Доложил:{ffffff} Cesa[R]
[13:21:34] WANTED:{6495ED} [ID 244] Artem_232 был обвинен в: уклон [2 зв] Доложил:{ffffff} Cesa[R]
[13:21:34] WANTED:{6495ED} [ID 169] Alexey666Ryabko был обвинен в: нападение на по [3 зв] Доложил:{ffffff} Cesa[R]
[13:21:34] WANTED:{6495ED} [ID 193] Honest был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Danil_Hill
[13:21:34] WANTED:{6495ED} [ID 275] [LCN]DimkO был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} ol.dirty_bastard
[13:26:32] WANTED:{6495ED} [ID 112] Demon_Oxotnikq был обвинен в: Маты [2 зв] Доложил:{ffffff} Jason_Connolly
[13:27:37] WANTED:{6495ED} [ID 288] Semen_Tara был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} AUTORCRIME
[13:38:14] WANTED:{6495ED} [ID 313] killer2001 был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Mixail.
[13:38:14] WANTED:{6495ED} [ID 250] Cypress_Hill был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Daniel_Jones
[13:38:14] WANTED:{6495ED} [ID 97] mihail1998 был обвинен в: оруж. деталь [2 зв] Доложил:{ffffff} Martin_Baines
[13:38:14] WANTED:{6495ED} [ID 190] lexa_disskiy был обвинен в: напад на По [3 зв] Доложил:{ffffff} Richard_Cypher
[13:38:14] WANTED:{6495ED} [ID 190] lexa_disskiy был обвинен в: нападение на П [3 зв] Доложил:{ffffff} Martin_Baines
[13:40:16] WANTED:{6495ED} [ID 42] BiG_Stan был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Cypress_Hill
[13:41:38] WANTED:{6495ED} [ID 250] Cypress_Hill был обвинен в: Серийные убийства [1 зв] Доложил:{ffffff} BiG_Stan
[13:43:31] WANTED:{6495ED} [ID 159] GangstaR_Rio был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Joseph_McCarty
[13:43:33] WANTED:{6495ED} [ID 288] Mad_Andy был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Cypress_Hill
[13:43:56] WANTED:{6495ED} [ID 321] Marco_Clemente был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Andrey_Ham
[13:44:02] WANTED:{6495ED} [ID 121] Swaggggy был обвинен в: напад на ПО [3 зв] Доложил:{ffffff} Richard_Cypher
[13:44:59] WANTED:{6495ED} [ID 159] GangstaR_Rio был обвинен в: 1.2 [2 зв] Доложил:{ffffff} Joseph_McCarty
[14:02:17] WANTED:{6495ED} [ID 92] goodd был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Roman_ionihiev
[14:02:17] WANTED:{6495ED} [ID 244] Matthew_Jefferson был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Charlz_Smith
[14:02:17] WANTED:{6495ED} [ID 250] Cypress_Hill был обвинен в: акт.т.агр [7 зв] Доложил:{ffffff} Cesa[R]
[14:02:17] WANTED:{6495ED} [ID 109] Nick_CoIins был обвинен в: акт.т.агр [7 зв] Доложил:{ffffff} Cesa[R]
[14:02:17] WANTED:{6495ED} [ID 109] Nick_CoIins был обвинен в: акт.т.агр [3 зв] Доложил:{ffffff} Cesa[R]
[14:02:17] WANTED:{6495ED} [ID 174] Loga[N] был обвинен в: акт.т.агр [3 зв] Доложил:{ffffff} Cesa[R]
[14:02:17] WANTED:{6495ED} [ID 174] Loga[N] был обвинен в: акт.т.агр [7 зв] Доложил:{ffffff} Cesa[R]
[14:02:17] WANTED:{6495ED} [ID 101] Bob_Colins был обвинен в: соучастие/wanted [5 зв] Доложил:{ffffff} Cesa[R]
[14:02:17] WANTED:{6495ED} [ID 43] Andrey_Ham был обвинен в: оск по [2 зв] Доложил:{ffffff} Cesa[R]
[14:02:17] WANTED:{6495ED} [ID 266] GannibaILector был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Boris_Kutaev
[14:02:17] WANTED:{6495ED} [ID 92] Jack_Red был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Sanya_Shepelev
[14:02:17] WANTED:{6495ED} [ID 284] Roman_ionihiev был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Jack_Red

3 (изменено: serzh82saratov, 2013-08-07 16:51:05)

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]


Name = Jonsen_Delabor
Pattern := "m`aS)^(\[\d+:\d+:\d+]).*?]\s*\Q" Name "\E\s*был обвинен в:\s*(.*?)\s*\[.*?]\s*Доложил:{ffffff}\s*(.*)$"

WANTED =
(
[14:02:17] WANTED:{6495ED} [ID 266] GannibaILector был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Boris_Kutaev
[12:53:46] WANTED:{6495ED} [ID 66] Jonsen_Delabor был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Kenny_Bush
[14:02:17] WANTED:{6495ED} [ID 92] Jack_Red был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Sanya_Shepelev
[14:02:17] WANTED:{6495ED} [ID 284] Roman_ionihiev был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Jack_Red
[14:23:55] WANTED:{6495ED} [ID 66] Jonsen_Delabor был обвинен в: Угон ТС [2 зв] Доложил:{ffffff} Edgar_Goover
[14:02:17] WANTED:{6495ED} [ID 266] GannibaILector был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Boris_Kutaev
[14:02:17] WANTED:{6495ED} [ID 92] Jack_Red был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Sanya_Shepelev
[14:02:17] WANTED:{6495ED} [ID 284] Roman_ionihiev был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Jack_Red
[12:53:44] WANTED:{6495ED} [ID 66] Jonsen_Delabor был обвинен в: erbtrbbevb [erbbeb зв] Доложил:{ffffff} bdrserttren
)

Pos := 1
While Pos 
    Pos := RegExMatch( WANTED, Pattern, Match, Pos), Pos := Pos ? ++Pos : 0
    , Res .= Pos ? Match1 " " Match2 " :: " Match3 "`n" : "" 
MsgBox % Res 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

4

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

Когда паттерн нужно искать в тексте много раз, существует более "технологичный" способ:

Name = Jonsen_Delabor
WANTED =
(
[14:02:17] WANTED:{6495ED} [ID 266] GannibaILector был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Boris_Kutaev
[12:53:46] WANTED:{6495ED} [ID 66] Jonsen_Delabor был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Kenny_Bush
[14:02:17] WANTED:{6495ED} [ID 92] Jack_Red был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Sanya_Shepelev
[14:02:17] WANTED:{6495ED} [ID 284] Roman_ionihiev был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Jack_Red
[14:23:55] WANTED:{6495ED} [ID 66] Jonsen_Delabor был обвинен в: Угон ТС [2 зв] Доложил:{ffffff} Edgar_Goover
[14:02:17] WANTED:{6495ED} [ID 266] GannibaILector был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Boris_Kutaev
[14:02:17] WANTED:{6495ED} [ID 92] Jack_Red был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Sanya_Shepelev
[14:02:17] WANTED:{6495ED} [ID 284] Roman_ionihiev был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Jack_Red
[12:53:44] WANTED:{6495ED} [ID 66] Jonsen_Delabor был обвинен в: erbtrbbevb [erbbeb зв] Доложил:{ffffff} bdrserttren
)

RegExMatch(WANTED, "m`a)^(\S+) .*] \Q" Name "\E.*в: (.*) \[.* (\S+)$(?CCallout)")
MsgBox, % matches
return

Callout(m)
{
   global matches .= m1 " " m2 " :: " m3 "`n"
   Return 1
}

Regular Expression Callouts

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

5

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

Прикольно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

6

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

Ребята, пока что имею:

Коротеньким скриптом я делаю выборку из chatlog.txt по двум параметрам и записываю результат в два разных файла target.txt - содержит все мои запросы по конкретным преступникам, а wanted.txt как и до этого содержит все сообщения о выданом людям розыске.

Скрипт:

+ открыть спойлер

^!NumPadAdd::
{
Loop, read, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\chatlog.txt, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\wanted.txt
{
    IfInString, A_LoopReadLine, WANTED, FileAppend, %A_LoopReadLine%`n
} 

Loop, read, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\chatlog.txt, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\target.txt
{
    IfInString, A_LoopReadLine, Alex_Matpocob сказал: ?, FileAppend, %A_LoopReadLine%`n
}
sendinput {f6}/me провел архивацию данных розыска{enter}
sleep 1000
}
return

Пример содержимого файла target.txt:

+ открыть спойлер

[11:22:42] Alex_Matpocob сказал: ? Desmond_Miles
[11:22:42] Alex_Matpocob сказал: ? Desmond_Miles
[11:25:12] Alex_Matpocob сказал: ? Kevin_Durant
[11:27:28] Alex_Matpocob сказал: ? Alvin_Greep

Внимание вопросы:

1. Как мне прочесть крайнюю строку файла target.txt и присвоить значение переменной Name - именно последнее имя из этого файла ... причем без "[11:27:28] Alex_Matpocob сказал: ? " ?
2. Как присвоить переменной WANTED - значение равное содержимому файла wanted.txt ... если это вообще возможно.
3. Как бы мне после указанных вами манипуляций ... загнать значение результата не в MsgBox, а в переменную, чтобы её в последствии вывести в чат игры, каким-нибудь ...

::!NumPad1
{
sendinput {f6} %RES% {enter}
}
return

7 (изменено: Alex_Matpocob, 2013-08-08 14:42:01)

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

Итак ... первые два своих вопроса разобрал самостоятельно. Что имею на текущий момент:

1. Имя искомого преступника таки поймал в переменную Name1
2. Переменная wanted теперь таки содержит в себе все строки преступлений ...

Текущий вид скрипта

+ открыть спойлер

#IfWinActive GTA:SA:MP

^!NumPadAdd::
{

FileDelete, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\wanted.txt
FileDelete, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\target.txt

Loop, read, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\chatlog.txt, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\wanted.txt
{
    IfInString, A_LoopReadLine, WANTED:{6495ED}, FileAppend, %A_LoopReadLine%`n
} 

Loop, read, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\chatlog.txt, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\target.txt
{
    IfInString, A_LoopReadLine, ] Alex_Matpocob сказал: ?, FileAppend, %A_LoopReadLine%`n
}

Loop, read, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\target.txt
    target := A_LoopReadLine

FileRead, wanted, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\wanted.txt
RegExMatch(target, "] Alex_Matpocob сказал: \? (.*)", Name)

Pattern := "m`aS)^(\[\d+:\d+:\d+]).*?]\s*\Q" Name1 "\E\s*был обвинен в:\s*(.*?)\s*\[.*?]\s*Доложил:{ffffff}\s*(.*)$"
Pos := 1
While Pos 
    Pos := RegExMatch( wanted, Pattern, Match, Pos), Pos := Pos ? ++Pos : 0
    , Res .= Pos ? Match1 " " Match2 " :: " Match3 "`n" : "" 

sendinput {f6}/delimeter{enter}
sendinput {f6}TARGET:%target%{enter}
sendinput {f6}PRISON:%Name1%{enter}
sendinput {f6}/delimeter{enter}
sendinput {f6}RESULT:%Res%{enter}

sleep 1000
}
return

итак ... основная проблема, что я так и не разобрался как присобачить к своему скрипту ваши конструкции по сортировке данных файла wanted.txt и их вывода в чат игры ...

Что только не менял ... переменные Res, Match, Pos, Match1, Match2 ... все время пустые ... совпадения есть имя преступника + розыска есть, но скрипт их по прежнему не фильтрует. Тупик, мои чувства в смятении ... остался последний поджопник, прошу вас дайте его мне

8

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

переменные Res, Match, Pos, Match1, Match2 ... все время пустые ...

FileRead, wanted, *t C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\wanted.txt
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

9 (изменено: Alex_Matpocob, 2013-08-08 16:18:39)

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

Крутил - вертел и получилось, но есть один момент ... если преступник совершил несколько преступлений, то выборка происходит только по первому, а все последующие фильтр не учитывает и не выводит ... подскажите, что не так?


^!NumPadAdd::
{

FileDelete, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\wanted.txt
FileDelete, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\target.txt
FileDelete, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\result.txt

Loop, read, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\chatlog.txt, C:\Users\Matpocob

\Documents\GTA San Andreas User Files\SAMP\wanted.txt
{
    IfInString, A_LoopReadLine, WANTED:{6495ED}, FileAppend, %A_LoopReadLine%`n
} 

Loop, read, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\chatlog.txt, C:\Users\Matpocob

\Documents\GTA San Andreas User Files\SAMP\target.txt
{
    IfInString, A_LoopReadLine, ] Alex_Matpocob сказал: ?, FileAppend, %A_LoopReadLine%`n
}

Loop, read, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\target.txt
    target := A_LoopReadLine

FileRead, wanted, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\wanted.txt

RegExMatch(target, "] Alex_Matpocob сказал: \? (.*)", Name)

Loop, read, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\wanted.txt, C:\Users\Matpocob

\Documents\GTA San Andreas User Files\SAMP\result.txt
{
    IfInString, A_LoopReadLine, %Name1%, FileAppend, %A_LoopReadLine%`n
}

FileRead, result, C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\result.txt

sendinput {f6}/delimeter{enter}
sendinput {f6}Список правонарушений совершенных преступником: %Name1%{enter}
sendinput {f6} %result%{enter}
sendinput {f6}/delimeter{enter}

RegExMatch(result, "m`a)^(\S+) .*] \Q" Name1 "\E.*в: (.*) \[.* (\S+)$(?CCallout)")
sendinput {f6} %matches% {enter}
return

Callout(m)
{
   global matches .= m1 " " m2 " :: " m3 "`n"
   Return 1
}

sleep 1000
}
return

Тоесть из всего документа result.txt он читает только первую строку ... чистит её от "мусора" и выводит на экран, а остальные строки остаются нетронутыми ... я понимаю, что это связано с тем, что я считал весь файл в одну переменную ... вот тут и возникает вопрос, может быть, что лучше этот файл считывать в массив строчных переменных ... возможно ли это в AHK и если да, то пожалуйста подскажите как это реализовать на данном этапе.

10

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

Совет из 8 поста не помог?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

11

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

И ещё совет - замени все записи "C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\" на переменную, читать невозможно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

12 (изменено: Alex_Matpocob, 2013-08-08 17:11:09)

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

wanted.txt

+ открыть спойлер

[15:23:58] WANTED:{6495ED} [ID 187] Antonio_Clemente был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Bob_Colins
[15:23:58] WANTED:{6495ED} [ID 118] Daniel_Santana был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Hollywood_
[15:29:18] WANTED:{6495ED} [ID 114] Luka[S] был обвинен в: 1 [3 зв] Доложил:{ffffff} Max_Godjica
[15:42:40] WANTED:{6495ED} [ID 287] OlegBpaeH был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Sanya_Bayron
[15:44:50] WANTED:{6495ED} [ID 57] Frederico_Lopez был обвинен в: Умышленное убийство [3 зв] Доложил:{ffffff} Mark_King
[15:44:50] WANTED:{6495ED} [ID 57] Frederico_Lopez был обвинен в: Серийные убийства [1 зв] Доложил:{ffffff} Javier_Morales
[16:02:50] WANTED:{6495ED} [ID 79] Max_Fesl был обвинен в: напад на ПО [3 зв] Доложил:{ffffff} Richard_Cypher
[16:02:57] WANTED:{6495ED} [ID 79] Max_Fesl был обвинен в: нападение на ПО [3 зв] Доложил:{ffffff} Max_Godjica

target.txt

+ открыть спойлер

[15:19:39] Alex_Matpocob сказал: ? 1
[15:24:11] Alex_Matpocob сказал: ? Daniel_Santana
[15:29:28] Alex_Matpocob сказал: ? Luka
[15:30:01] Alex_Matpocob сказал: ? Antonio_Clemente
[15:30:45] Alex_Matpocob сказал: ? Antonio
[15:31:43] Alex_Matpocob сказал: ? Luka[S]
[15:32:01] Alex_Matpocob сказал: ? Antonio
[15:45:20] Alex_Matpocob сказал: ? Frederico_Lopez
[16:03:07] Alex_Matpocob сказал: ? Max_Fesl

result.txt

+ открыть спойлер

[16:02:50] WANTED:{6495ED} [ID 79] Max_Fesl был обвинен в: напад на ПО [3 зв] Доложил:{ffffff} Richard_Cypher
[16:02:57] WANTED:{6495ED} [ID 79] Max_Fesl был обвинен в: нападение на ПО [3 зв] Доложил:{ffffff} Max_Godjica

script.ahk

+ открыть спойлер

#IfWinActive GTA:SA:MP

^!NumPadAdd::
{

path := "C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\"

FileDelete, %path%wanted.txt
FileDelete, %path%target.txt
FileDelete, %path%result.txt

Loop, read, %path%chatlog.txt, %path%wanted.txt
{
    IfInString, A_LoopReadLine, WANTED:{6495ED}, FileAppend, %A_LoopReadLine%`n
}

Loop, read, %path%chatlog.txt, %path%target.txt
{
    IfInString, A_LoopReadLine, ] Alex_Matpocob сказал: ?, FileAppend, %A_LoopReadLine%`n
}

Loop, read, %path%target.txt
    target := A_LoopReadLine

FileRead, wanted, *t %path%wanted.txt

RegExMatch(target, "] Alex_Matpocob сказал: \? (.*)", Name)

Loop, read, %path%wanted.txt, %path%result.txt
{
    IfInString, A_LoopReadLine, %Name1%, FileAppend, %A_LoopReadLine%`n
}

FileRead, result, *t %path%result.txt

sendinput {f6}/delimeter{enter}
sendinput {f6}Список правонарушений совершенных преступником: %Name1%{enter}
sendinput {f6} %result%{enter}
sendinput {f6}/delimeter{enter}

RegExMatch(result, "m`a)^(\S+) .*] \Q" Name1 "\E.*в: (.*) \[.* (\S+)$(?CCallout)")
sendinput {f6} %matches% {enter}
return

Callout(m)
{
   global matches .= m1 " " m2 " :: " m3 "`n"
   Return 1
}

sleep 1000
}
return

визуальный результат:

+ открыть спойлер

http://imagestun.com/kartinki/samp343.png

Описание текущей проблемы:

1. Как вы видите ... под крайний разделитель попали данные только касательно первого преступления, хотя преступник совершил два ... и в result.txt они оба попали, но при выборке в чат выводится только первое.
2. При выводе данных в чат прямо из файла result.txt без "форматирования", у всех строк начиная со второй теряются первые 15 символов: "[XX:XX:XX] WANT".

13

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

Вы в архиве все файлы выложите...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

14

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

Так, нет?

+ открыть спойлер

#IfWinActive GTA:SA:MP

^!NumPadAdd:: 
    
    path := "C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\"
    
    FileDelete, %path%wanted.txt
    FileDelete, %path%target.txt
    FileDelete, %path%result.txt
    
    Loop, read, %path%chatlog.txt, %path%wanted.txt 
        IfInString, A_LoopReadLine, WANTED:{6495ED}, FileAppend, %A_LoopReadLine%`n 
    
    Loop, read, %path%chatlog.txt, %path%target.txt 
        IfInString, A_LoopReadLine, ] Alex_Matpocob сказал: ?, FileAppend, %A_LoopReadLine%`n 
    
    Loop, read, %path%target.txt
        target := A_LoopReadLine
    
    FileRead, wanted, *t %path%wanted.txt
    
    RegExMatch(target, "] Alex_Matpocob сказал: \? (.*)", Name)
    
    Loop, read, %path%wanted.txt, %path%result.txt 
        IfInString, A_LoopReadLine, %Name1%, FileAppend, %A_LoopReadLine%`n 
    
    FileRead, result, *t %path%result.txt
    
    sendinput {f6}/delimeter{enter}
    sendinput {f6}Список правонарушений совершенных преступником: %Name1%{enter}
    sendinput {f6} %result%{enter}
    sendinput {f6}/delimeter{enter}
    
    RegExMatch(result, "m`a)^(\S+) .*] \Q" Name1 "\E.*в: (.*) \[.* (\S+)$(?CCallout)")
    sendinput {f6} %matches% {enter} 
    sleep 1000 
    return

Callout(m) {
   global matches .= m1 " " m2 " :: " m3 "`n"
   Return 1
}

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

15

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

serzh82saratov пишет:

Так, нет?

Нет. Так вообще ничего не происходит. Файлы не создаются, в чат выводятся пустые строки ...

16 (изменено: serzh82saratov, 2013-08-09 01:31:09)

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

У меня так, в порядке.


#SingleInstance Force

path := A_ScriptDir
SetKeyDelay, 25

FileRead, result, *t %path%\WANTED.txt   ;  с result.txt тоже
  
Name1 = Max_Fesl 
RegExMatch(result, "m`a)^(\S+) .*] \Q" Name1 "\E.*в: (.*) \[.* (\S+)$(?CCallout)")
MsgBox % matches
sleep 1000
sendinput {f6}%matches%{enter} 
return
  
Callout(m)
{
   global matches .= m1 " " m2 " :: " m3 "`n"
   Return 1
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

17

Re: AHK: Скрипт-фильтр текстового log-файла [для SA:MP]

В итоге возможно вышло неэлегантно, зато работает именно так как мне надо
Огромное спасибо за помощь без вас я бы точно не разобрался как это сделать.

Финальная рабочая версия:

+ открыть спойлер

#IfWinActive GTA:SA:MP

^!NumPadAdd::
{

path := "C:\Users\Matpocob\Documents\GTA San Andreas User Files\SAMP\"

FileDelete, %path%wanted.txt
FileDelete, %path%target.txt
FileDelete, %path%result.txt
FileDelete, %path%home.txt

sendinput {f6}/delimeter{enter}

Loop, read, %path%chatlog.txt, %path%wanted.txt
{
    IfInString, A_LoopReadLine, WANTED:{6495ED}, FileAppend, %A_LoopReadLine%`n
} 

Loop, read, %path%chatlog.txt, %path%target.txt
{
    IfInString, A_LoopReadLine, ] Alex_Matpocob сказал: ?, FileAppend, %A_LoopReadLine%`n
}

Loop, read, %path%target.txt
    target := A_LoopReadLine

FileRead, wanted, *t %path%wanted.txt

RegExMatch(target, "] Alex_Matpocob сказал: \? (.*)", Name)
sendinput {f6}[ Федеральная база ][ Оперативные данные ][ Объект : %Name1% ]{enter}

Loop, read, %path%wanted.txt, %path%result.txt
{
    IfInString, A_LoopReadLine, %Name1%, FileAppend, %A_LoopReadLine%`n
}

Loop, read, %path%base.txt, %path%home.txt
{
    IfInString, A_LoopReadLine, %Name1%, FileAppend, %A_LoopReadLine%`n
} 

Loop, read, %path%result.txt
{
    RegExMatch(A_LoopReadLine, "m`aS)^(\[\d+:\d+:\d+]).*?]\s*\Q", time)
    RegExMatch(A_LoopReadLine, " WANTED:{6495ED} (.*) был обвинен в: ", suspect)
    RegExMatch(A_LoopReadLine, "\E\s*был обвинен в:\s*(.*?)\s*\s*Доложил:{ffffff}\s*(.*)$", reason)
    RegExMatch(A_LoopReadLine, "Доложил:{ffffff}(.*)", victim)
    sendinput {f6}%time1% %suspect1% :: %reason1%  [%victim1% ]{enter}
    sleep 200
}
sendinput {f6}/delimeter{enter}
sendinput {f6}[ Федеральная база ][ Данные места жительства ]{enter}
Loop, read, %path%home.txt
{
    home := A_LoopReadLine
    sendinput {f6} %home%{enter}
    sleep 200
}

sleep 1000
}
return

^!NumPadSub::
{
sendinput {f6}?{space}
sleep 1000
}