1

Тема: AHK: Поиск значения в строке

Ребят, пожалуйста, помогите. Есть строка, например:

Jasper: Эй, Desire, запомни ка эти цифры {228}

Вот, нужно эти самые 228 поместить в переменную, но увы, я не знаю как найти их в строке :С

Мой код (там в конце место, куда вставить циферки. Заранее - спасибо):

Filename=%A_MyDocuments%\log.txt
block=0s
Loop, read, %Filename%
nstroki=%A_Index%
start:
if on=2
return
if block=1
goto start
FileReadLine, stroka, %Filename%, %nstroki%
if ErrorLevel
{
nstroki-=1
goto start
}
if stroka=
{
nstroki+=1
goto start
}
IfInString, stroka, Jasper:
{
if (InStr(stroka, "эти цифры"))
{
RegExMatch(stroka, ".*\((.*)\):", tralivali)


Вот твои циферки, братишь: ;Тут, короче, должны быть цифры из строки "stroka"


nstroki+=1
goto start
}
}
nstroki+=1
goto start
return

2

Re: AHK: Поиск значения в строке

Никто не знает, что-ли?

3

Re: AHK: Поиск значения в строке

stroka := "Jasper: Эй, Desire, запомни ка эти цифры {228}"
stroka := RegExReplace(stroka, ".*{(.*)}", "$1")
MsgBox, Вот твои циферки, братишь:`r`n %stroka%

4

Re: AHK: Поиск значения в строке

Задание слишком неконкретное. Если нужно выудить первые попавшиеся цифры из строки — то так:

string := "Jasper: Эй, Desire, запомни ка эти цифры {228}"
MsgBox, % var := RegExReplace(string, ".*?(\d+).*", "$1")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: Desire, 2014-07-23 00:56:33)

Re: AHK: Поиск значения в строке

ypppu пишет:
stroka := "Jasper: Эй, Desire, запомни ка эти цифры {228}"
stroka := RegExReplace(stroka, ".*{(.*)}", "$1")
MsgBox, Вот твои циферки, братишь:`r`n %stroka%

Работает, но почему-то только с "{" и "}". Пробовал ставить с "[" и "]" - не работает. Так же пробовал с "/" и "\" - результат тот же.

stroka := "Jasper: Эй, Desire, запомни ка эти цифры [228]"
stroka := RegExReplace(stroka, ".*[(.*)]", "$1")
MsgBox, Вот твои циферки, братишь:`r`n %stroka%

P.S. Вы там, наверное, смеетесь над моей глупостью

6

Re: AHK: Поиск значения в строке

Desire пишет:

P.S. Вы там, наверное, смеетесь над моей глупостью

Да не, просто тема такая хитрая. Чтобы въехать нужно время, а в следующий раз как понадобится - уже забыл, как RegEx работает. Я вот написал с ошибкой, а пример заработал. С утра смотрю - что-то не то: служебный символ не экранирован.

Вот так правильно:

stroka := "Jasper: Эй, Desire, запомни ка эти цифры {228}"
stroka := RegExReplace(stroka, ".*\{(.*)\}", "$1")
MsgBox, Вот твои циферки, братишь:`r`n %stroka%

stroka := "Jasper: Эй, Desire, запомни ка эти цифры [228]"
stroka := RegExReplace(stroka, ".*\[(.*)\]", "$1")
MsgBox, Вот твои циферки, братишь:`r`n %stroka%

7

Re: AHK: Поиск значения в строке

Desire пишет:

Не могли бы вы, пожалуйста, научить пользоваться "RegExReplace" в ahk?

В RegEx, как я заметил, шарят товарищи YMP, teadrinker, serzh82saratov не отстаёт. Может кто ещё согласится помочь. Может, на возмездной основе (всё-таки хостинг теперь платный).

8

Re: AHK: Поиск значения в строке

Desire, советую вчитаться в русскую справку по RegEx, мне помогло.
Главное понять как работают спец-символы.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

9

Re: AHK: Поиск значения в строке

Alectric пишет:

Desire, советую вчитаться в русскую справку по RegEx, мне помогло.
Главное понять как работают спец-символы.

Тяжело вот так взять и понять

10

Re: AHK: Поиск значения в строке

Тяжело вот так взять и всему научить, надо задавать конкретные вопросы с короткими примерами кода который непонятен.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11

Re: AHK: Поиск значения в строке

Ну, например, есть строка

[11:16]Сообщение от Иг[р]ок2[31]: Привет

Нужно поместить в переменную только цифры 31.
При этом трудность в том, что с символами "[" и "]" сначала идет время, потом эти же символы могут попадаться в нике игрока, а потом уже нужный индетификатор между "[" и "]:"

Или же есть вариант получить ник игрока между "от{space}" и "[\d]:"

Единственно, что я не знаю как правильно обращаться с выражениями =)

12

Re: AHK: Поиск значения в строке

Desire пишет:

я не знаю как правильно обращаться с выражениями

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

При этом трудность в том, что с символами "[" и "]" сначала идет время, потом эти же символы могут попадаться в нике игрока, а потом уже нужный индетификатор между "[" и "]:

Достаточно ли будет признака, что после закрывающей скобки идёт двоеточие?

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

13 (изменено: Desire, 2014-07-23 21:53:59)

Re: AHK: Поиск значения в строке

teadrinker пишет:

Достаточно ли будет признака, что после закрывающей скобки идёт двоеточие?

Я думаю, что да. Но, как мне кажется определить ник проще. Кстати, под \d я подразумевал, что это любое число.

14

Re: AHK: Поиск значения в строке

Desire пишет:

Я думаю, что да. Но, как мне кажется определить ник проще.

Не совсем понял, мы сейчас про ник говорим, или про число? Не нужно всё мешать в кучу, сначала определите достаточные признаки для числа, затем для ника. А что касается последнего, то даже примера приведено не было.

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

15 (изменено: Desire, 2014-07-23 22:06:02)

Re: AHK: Поиск значения в строке

teadrinker пишет:

А что касается последнего, то даже примера приведено не было.

Я про это:

Desire пишет:

Или же есть вариант получить ник игрока между "от{space}" и "[\d]:"

______________________________________________________________

teadrinker пишет:

Не совсем понял, мы сейчас про ник говорим, или про число? Не нужно всё мешать в кучу, сначала определите достаточные признаки для числа, затем для ника.

Мне нужно определить либо то, либо другое. Результат не поменяется. Что проще - то и находить

16

Re: AHK: Поиск значения в строке

Сложности не представляет ни тот, ни другой вариант. Если нужно число, стоящее между квадратными скобками, после последней из которых идёт двоеточие, то так:

string := "[11:16]Сообщение от Иг[р]ок2[31]: Привет"
MsgBox, % RegExReplace(string, ".*\[(\d+)]:.*", "$1")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17

Re: AHK: Поиск значения в строке

teadrinker пишет:

Сложности не представляет ни тот, ни другой вариант. Если нужно число, стоящее между квадратными скобками, после последней из которых идёт двоеточие, то так:

string := "[11:16]Сообщение от Иг[р]ок2[31]: Привет"
MsgBox, % RegExReplace(string, ".*\[(\d+)]:.*", "$1")

Может стоит замониторить закрывающую скобку?

RegExReplace(string, ".*\[(\d+)\]:.*", "$1")

18

Re: AHK: Поиск значения в строке

Список символов, которые нужно экранировать здесь.

the characters \.*?+[{|()^$ must be preceded by a backslash to be seen as literal

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

19 (изменено: Desire, 2014-07-23 22:58:35)

Re: AHK: Поиск значения в строке

teadrinker пишет:

Список символов, которые нужно экранировать здесь.

Т.е. можно экранировать только начало любой скобки, если есть закрыте?

20

Re: AHK: Поиск значения в строке

Те что в списке — экранировать, независимо от открывания или закрывания.

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

21

Re: AHK: Поиск значения в строке

teadrinker пишет:

Те что в списке — экранировать, независимо от открывания или закрывания.

А, все, понял. Я просто не увидел текстбокс, а смотрел на сайте, по таблице

22

Re: AHK: Поиск значения в строке

Точнее, те символы, которые в списке, нужно экранировать, независимо от того, являются ли они открывающими или закрывающими скобками.

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

23

Re: AHK: Поиск значения в строке

Desire пишет:

Может стоит замониторить закрывающую скобку?

OFF: Слово "экранировать" не связано с мониторами. В широком смысле оно означает "поставить экран, преграду, щит, защиту, оградить". Экранировать спецсимвол - как бы защитить его от системной обработки.

24

Re: AHK: Поиск значения в строке

ypppu пишет:
Desire пишет:

Может стоит замониторить закрывающую скобку?

OFF: Слово "экранировать" не связано с мониторами. В широком смысле оно означает "поставить экран, преграду, щит, защиту, оградить". Экранировать спецсимвол - как бы защитить его от системной обработки.

Просто само вырвалось. Главное, что смысл поняли