1

Тема: AHK: Поиск в тексте.

Как можно найти строку и скопировать её в переменную, если не известен номер строки, но известны некоторые слова в строке.
Примерно так выглядит текст.


лялялял
тополя
цвет [не постоянные символы]
тучки

Можно ли как -то по слову "цвет" найти и скопировать в переменную полностью строку.
Перепробовал много кодов, но так и не смог разобраться в RegExMatch.
Если можно напишите пример.

2 (изменено: svoboden, 2018-01-20 10:48:54)

Re: AHK: Поиск в тексте.

http://forum.script-coding.com/viewtopic.php?id=12541.

3 (изменено: 234783g, 2018-01-20 16:49:39)

Re: AHK: Поиск в тексте.

Numpad0::
FileRead,list, %A_ScriptDir%\test.txt
Word = Slovo
Sleep 1000
RegExMatch(list, "m`a)^.*\\*\Q" word "\E[^\\]*$", Match)
msgbox %Match%
return

txt файл

варпврпрпварпавправпрова
рправрпавырповаырпоаврпова
рпвоарпваырпаврпавырпавырповаъ
рварпврповапрапроврпаврпоавырав
Slovo оаворваорваораворлваорлорлав
рпвапрварпаврпоаврповарпварпрпвоарпова
врарварповарпоаврпоаврпрповрпав
рповрповарпварпварпаврварпваврп

Мне нужно вывести только строку, содержащую "Slovo", а у меня почему-то выводится весь текст файла после "Slova"
Хочу получить в переменную "Slovo оаворваорваораворлваорлорлав", А получается "Slovo оаворваорваораворлваорлорлав
рпвапрварпаврпоаврповарпварпрпвоарпова
врарварповарпоаврпоаврпрповрпав
рповрповарпварпварпаврварпваврп"

4 (изменено: 234783g, 2018-01-20 16:13:07)

Re: AHK: Поиск в тексте.

1

5

Re: AHK: Поиск в тексте.

234783g пишет:

1

234783g, поверь на слово: проще выделить вечер-другой и разобраться в теме Регулярные выражения (RegEx) - краткий справочник, чем по каждому вопросу рыться в поиске или создавать кучу тем (если, конечно, планируешь и дальше с AHK работать). Времени сэкономишь уйму. Сам таким был в свое время). Там ничего трудного нет.

А по теме: `r или `n в конце формулы.

6

Re: AHK: Поиск в тексте.

Пытаюсь научиться, но когда совсем не получается никак, то пишу сюда.
Спасибо.

7

Re: AHK: Поиск в тексте.

Регулярки довольно мощный инструмент. Но особо хорош он на больших массивах текста, в которых мало упорядоченности, а если читаешь свой лог-файл, в котором всегда определённое структурирование через весь контент, то можно обойтись любыми другими костылями, если решение нужно сейчас, а костыли понятнее. Именно это меня всегда и останавливало перед постижением "RegExp". Проще разделить такой файл по глобальному признаку, а получившиеся части по меткам-разделителям и иметь весь распарсенный документ в массиве, потому как всё равно чаще оно нужно, чем НЕнужно.
Не хочу отбирать у Вас жажду познания этого, без сомнения превосходного инструмента, но приведу пример в аналогии с предыдущей темой:


text := 
(LTrim Join`r`n
	"планета 1, континент1, континент2
	KODстрана 1, город1, город2
	местность 1, поляна1, поляна2
	KODдеревня 1, улица1, улица2"
)
target	:= "KOD"
sep		:= ", "
wordsArr := GetWords(text, target, sep)
Loop,% wordsArr.Length() 
	MsgBox,,Title,% A_Index " найденный результат <|==>`n`n" wordsArr[A_Index][1] "`n" wordsArr[A_Index][2] "`n" wordsArr[A_Index][3]

GetWords(text, target, separator) {
	result := [], partNumber := 2, parts := StrSplit(text, target)
	Loop,% parts.Length() - 1
		result.Push(StrSplit(StrSplit(parts[partNumber++], "`r`n")[1], separator))
	return result
}

Здесь функция "GetWords()" принимает параметрами:
1 - переменную, в которой текст файла.
2 - глобальный признак, по которому нужно находить строки.
3 - разделитель, которым сепарируется строка на отдельные фрагменты.
Возвращает двумерный массив найденных результатов, в котором доступ к каждому слову в строке производится через указание двух индексов в квадратных скобках(wordsArr[1][2]), где первый индекс обозначает номер строки, а второй, номер слова.

8

Re: AHK: Поиск в тексте.

KusochekDobra
Получилось через  RegExMatch
Криво, но получилось.
Спасибо.

9 (изменено: svoboden, 2018-01-20 21:10:05)

Re: AHK: Поиск в тексте.

Можно через TF_Find найти строку, но тут библиотека TF нужна.