1 (изменено: dimasHP, 2019-05-08 13:23:00)

Тема: AHK: Проблема с переменной.

Пишу АХК для игры SAMP и столкнулся со следующей проблемой.
Суть АХК в том , что оно читает файл (чатлог) и когда видит строку , что мне передали деньги "[16:31:12] Nick_Name передал Вам $90".
И такая проблема , что когда через RegExMatch я читаю строку и вывожу число в конце в переменную , там возникает пробел. Я не знаю , как это исправить , чем я только не пользовался ...

;[18:52:57] Vamos_Grand {269BD8}передал Вам {33AA33}$20 - пример из чата
RegExMatch(read, "\Q[\E(.*):(.*):(.*)\Q]\E (.*) \Q{\E269BD8\Q}\Eпередал Вам \Q{\E33AA33\Q}\E\Q$\E(.*)", summa) 

Результат - переменная "summa5" = "20 ".

2

Re: AHK: Проблема с переменной.

P.S: Если знак доллара поставить в конце и выделить через RegExMatch , то число будет без пробела , но увы на сервере так , что число в конце строки.

3

Re: AHK: Проблема с переменной.

read = 
(
[18:52:57] Vamos_Grand {269BD8}передал Вам {33AA33}$20 - пример из чата 
)

RegExMatch(read, "m`a)^\[(?<time>\d+:\d+:\d+)] (?<nick>.*?) \{[A-E0-9]+}передал Вам \{[A-E0-9]+}\$(?<summa>\d+).*$", _) 

MsgBox % _summa "`n" _nick "`n" _time "`n" StrReplace(_time, ":")
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

4

Re: AHK: Проблема с переменной.

Под самп есть смысл применять один из самых нерекомендованных шаблонов для regexmatch - ".*", т.к. пробелы в сообщениях сервера сводят вероятность поймать жадность на нет (за 4 года программирования я поймал проблему с жадностью не более 10 раз).


read = 
(
[18:52:57] Vamos_Grand {269BD8}передал Вам {33AA33}$20 - пример из чата 
)

RegExMatch(read, "\[(.*)\] (.*) \{269BD8\}передал Вам \{33AA33\}\$(.*)", end_str)
msgbox, Игрок %end_str2% передал вам %end_str3% долларов в %end_str1%
Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

5

Re: AHK: Проблема с переменной.

А что, в этом примере нужно чтобы переменная была равна "20 - пример из чата"?

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

6

Re: AHK: Проблема с переменной.

serzh82saratov
Результат должен был быть summa5:=20
Но у меня проблема , что из-за пробела я не могу делать вычисления.

7

Re: AHK: Проблема с переменной.

А что, у вас код из 3 поста не число возвращает?

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

8

Re: AHK: Проблема с переменной.

serzh82saratov, я уверен что приставка " - пример из чата" была дописана ТС вручную. Даже если так, я лишь показал принцип создания алгоритма: серверные сообщения всегда имеют части, которые всегда идентичны.

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

9

Re: AHK: Проблема с переменной.

belyankin12
Это всё понятно, не понятно только - почему даже если есть уверенность, что можно использовать ".*" вместо ".*?", то это надо делать.

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

10

Re: AHK: Проблема с переменной.

serzh82saratov, это сугубо моя рекомендация, я не говорил что это абсолютно правильно. Мне когда-то было гораздо проще засунуть половину шаблона, который мне не нужен в (.*), чем расписывать ([0-9]+)\Q\E\d и т.д.

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

11

Re: AHK: Проблема с переменной.

Так это же можно засунуть и в (.*?).

belyankin12 пишет:

(за 4 года программирования я поймал проблему с жадностью не более 10 раз).

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

12

Re: AHK: Проблема с переменной.

А, вы об этом говорили. Думаю да, такой шаблон будет даже лучше. Хотя в свое время, если бы я не столкнулся с жадностью, я бы не изучил все эти ([0-9]+)\Q\E\d и т.д. (т.к. я тогда избегал жадности путем написания более "традиционного" шаблона, нежели использованием ?, т.к. невнимательно читал справку).

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

13

Re: AHK: Проблема с переменной.

Мне кажется проще читать новые строки построчно.

14

Re: AHK: Проблема с переменной.

В лог файле лучше а не проще, читать ещё непрочитанные строки, но это уже другая тема.

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

15

Re: AHK: Проблема с переменной.

Я вообще применял метод чтения снизу-вверх. Ну точнее все равно читается сверху-вниз, но совпадения возвращаются снизу-вверх. Хотя я до сих пор не вдавался как работает эта функция, мой наставник, который меня обучал основам АХК этот пример показал, так я его и применял, пока не начал читать через память чат.

log := {str:"",find:0,num:0}    ,    log.str := []
		FileEncoding, CP0
		Loop, read, %path_log%
		log.str.Insert(A_LoopReadLine)    ,log.num := A_Index
		loop 3
			if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)\]  SMS:(.*). Отправитель: (.*)_(.*)\[(.*)\]", end_str) and (log.find:=log.num + 1 - A_Index)
			break
Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

16

Re: AHK: Проблема с переменной.

Проще и лучше сдвигать файловый поинтер, у меня есть примеры на форуме.

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

17 (изменено: dimasHP, 2019-05-10 09:38:42)

Re: AHK: Проблема с переменной.

serzh82saratov
Всё сработало , но объясните пожалуйста данный метод выделения.

RegExMatch(read, "m`a)^\[(?<time>\d+:\d+:\d+)] (?<nick>.*?) \{[A-E0-9]+}передал Вам \{[A-E0-9]+}\$(?<summa>\d+).*$", _)

18

Re: AHK: Проблема с переменной.

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

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