1

Тема: AHK: Изъятие числовых значений из документа

Имеется такой код:


Loop, read, 11.txt,
{
    if InStr(A_LoopReadLine, "Ваш баланс: Монет")
	Last_found := A_LoopReadLine

S := % A_LoopReadLine
S := regexreplace(regexreplace(regexreplace(s
                  , "[^,\d]+", " ")
                  , ",", "")
                  , "^\s*(\S.*\S|\S)\s*$", "$1")

Msgbox, %S%

}
ExitApp

На выходе мне выдаёт значение 53 01, я же хочу, чтобы на выходе выдавалось как положено: 53.01, ибо в документе 11.txt написано следующее:
Ваш баланс: 53.01 Монет.

Вопрос: Как вырезать только цифры и точки между ними?

2 (изменено: mustang, 2019-09-18 23:21:28)

Re: AHK: Изъятие числовых значений из документа

Если у вас в файле строка вида Ваш баланс: 53.01 Монет
Тут тогда момент затрону про строку

if InStr(A_LoopReadLine, "Ваш баланс: Монет")

Она ничего никогда не найдет.

А если выдрать цифры с точкой то не ясно зачем используется так много regexreplace вложенных. Убираете так лишнее, чтобы осталось только "золото" ?
Можно воспользоваться поиском нужной строки через регулярные выражения командой RegExMatch .
Вот пример кода как я это вижу. ( поиграйтесь с S1 / S2 и regex1 / regex2 чтобы понять суть )


S1 := "Ваш баланс: 53.01 Монет"
S2 := "Ваш баланссссс333.0100--Монет"
regex1 := ":\s+?([0-9]+\.[0-9]+)\s+"	 ; поиск в строках вида - где есть точно двоеточие и пробел до цифр и пробелы после  ": 44.20 " или ": 9.1 " или ": 911.911 " или ": .911 "
regex2 := "([0-9]+\.[0-9]+)"  ; поиск в строках вида - где все равно какие где символы, но точно есть цифры и точка между ними  " бла бла3.2фф" или  "дд/555.888/дд"
Found := RegExMatch(S1, regex1, result)
if Found
	MsgBox, %result1%  ; под цифрой 1 сохраняется нужное значение т.к. мы использовали в regex скобки и найденное сохранилось в $1

3 (изменено: Clannad5, 2019-09-19 12:42:41)

Re: AHK: Изъятие числовых значений из документа

mustang

Спасибо, это работает так, как мне хотелось.


Loop, read, 11.txt,
{
    if InStr(A_LoopReadLine, "Ваш баланс: Монет")
	Last_found := A_LoopReadLine
S1 := A_LoopReadLine
regex1 := ":\s+?([0-9]+\.[0-9]+)\s+"
Found := RegExMatch(S1, regex1, result)
if Found
	MsgBox, %result1%
}
ExitApp