1 (изменено: Clannad5, 2020-09-15 04:24:01)

Тема: AHK: Поиск фразы. Между словами разные цифры (и некоторые вопросы)

Здравствуйте!
Приведу следующий .txt файл:


Новый год начнётся через 5 часов

ситуация: Каждый раз число между словом "через" и "часов" меняется 5,4,10,20 и т.д

есть скрипт по поиску строчки с этой надписью:


Loop, read, C:\1.txt,
{
    if InStr(A_LoopReadLine, "Новый год начнётся через 15 часов")
	Last_found := A_LoopReadLine
}
msgbox, % Last_found

Данный скрипт ничего не найдёт и выдаст в msgbox пустую строку, т.к переменная Last_found будет пуста.
Вопрос..
как найти эту строчку, игнорируя число между двумя словами, но при этом в конце записать эту строчку в переменную Last_found так же, как она выглядит в 1.txt?

2

Re: AHK: Поиск фразы. Между словами разные цифры (и некоторые вопросы)

Не совсем понятно, таких строк может быть много, и нужна именно последняя?

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

3

Re: AHK: Поиск фразы. Между словами разные цифры (и некоторые вопросы)

Думаю как-то так:

Text = 
(
Сайт для онлайн теста: regex101.com
Новый год начнётся через 15 часов
Но это не точно.
)

RegExMatch(Text, "(Новый год начнётся через) (\d+)(..+)\n", Found)
MsgBox, Вся найденная строка:`n%Found%
MsgBox, 1 переменная Found содержит:`n%Found1%
MsgBox, 2 переменная Found содержит:`n%Found2%
MsgBox, 3 переменная Found содержит:`n%Found3%
MsgBox, Весь текст без часов:`n%Found1% %Found3%

Это первое что пришло в голову, думаю есть более качественный вариант записи шаблона.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

4 (изменено: Clannad5, 2020-09-17 10:52:59)

Re: AHK: Поиск фразы. Между словами разные цифры (и некоторые вопросы)

__Михаил__

Мне не нужно удалять из текста числа или еще какие-то операции по редактированию текущего предложения.
пример: "У 15 есть 3 и вышло 7 поэтому 10"
Согласитесь, если в других строчках предложения тоже будут слова "У, есть, и вышло, поэтому" - то он и их найдет.

Мне же нужно, чтобы при поиске нужных строк, учитывались только предложения без цифр.
То есть, нужно чтобы я ввёл в поиске: У есть и вышло поэтому - и мне нашло конкретную строчку с цифрами, даже если я их не приводил в поиске.

Надеюсь так понятнее рассказал свою цель c:

Усложню задачу:


Text = 
(
Привет сегодня я здесь
Привет сегодня 10 утра
сегодня я здесь до утра
сегодня
утра
)

Если начнём поиск по двум словам "Привет сегодня" - мы найдем две строчки.
если начнём по одному слову - мы найдем как минимум 1-3 строчки, которые нам не нужны.
Но если бы мы искали целиком: Привет сегодня утра - то мы бы нашли только одну строчку, которая нам нужна.

5

Re: AHK: Поиск фразы. Между словами разные цифры (и некоторые вопросы)

Clannad5
То одна задача, то другая. Приведённый мной код находит желаемое в шапке темы. Отредактировать код нет особой проблемы.

как найти эту строчку, игнорируя число между двумя словами, но при этом в конце записать эту строчку в переменную Last_found так же, как она выглядит в 1.txt?

MsgBox, Вся найденная строка:`n%Found%
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

6

Re: AHK: Поиск фразы. Между словами разные цифры (и некоторые вопросы)

__Михаил__

Не особо понимаю, можно как-то в пример добавить то, что я выше написал?Пожалуйста

7

Re: AHK: Поиск фразы. Между словами разные цифры (и некоторые вопросы)

Loop, read, C:\1.txt,
{
   if RegExMatch(A_LoopReadLine, "s)[^\R]*(Новый год начнё?тся через \d+ часов)[^\R]*", Last_found)
      msgbox, %Last_found%
}

8 (изменено: DD, 2020-09-18 05:16:41)

Re: AHK: Поиск фразы. Между словами разные цифры (и некоторые вопросы)

Наверно, вот так лучше:

FileRead, file, C:\1.txt
   if RegExMatch(file, "s)^.*(Новый год начнё?тся через \d+ часов).*?$", Last_found)
      msgbox, %Last_found1%

9

Re: AHK: Поиск фразы. Между словами разные цифры (и некоторые вопросы)

DD

Ты мой спаситель, пасиба!