Что нового

[RegExp] Создание фильтра при помощи регулярного выражения

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Как можно в лог-файле отфильтровать только те строки, которые начинаются со слова ERROR? Т.е. считать лог-файл в строковую переменную, выбрать только те строки, которые начинаются со слова ERROR и вывести их на экран.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
#include 'array.au3'
$file=FileRead(@ScriptDir&'\123')
$str=StringRegExp($file,'(?m)^ERROR[^\r\n]++',3)
_ArrayDisplay($str)
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Спасибо. А вот я сейчас попробовал так:
Код:
$LogFile = FileOpen("C:\Dir\Log.txt")
$str = FileRead($LogFile)
FileClose($LogFile)
$result = StringRegExp($str, "(ERROR.*)", 3)


Правильно ли будет?
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
vitaliy4us
В вашем случае вернет данные абсолютно с любой строки, в которой присутствует ERROR(начиная с ERROR и до конца строки). Вот так еще пойдет:
Код:
'^(ERROR.*)'


^ - указывает на начало строки.
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Извините, не регулярный шаблон но все таки может подойдет=)
Код:
#include<Array.au3>
$s=__FileSeparat(@ScriptDir&"\1.txt","error",2)
;~ _ArrayDisplay($s)
MsgBox(0,'',$s)
Func __FileSeparat($sFiles,$sString1,$nMode=1)
	If Not FileExists($sFiles) Then Return 0
	Local $sReadFile=FileRead($sFiles),$aFileS=StringSplit($sReadFile,@LF,2)
	Local $sRet,$Return
	For $i=0 To UBound($aFileS)-1
		If StringInStr($aFileS[$i],$sString1)=1 Then
			$sRet&=$aFileS[$i]&@LF
		EndIf
	Next
	$sRet=StringStripWS($sRet,2)
	If $nMode=1 Then
		$Return=StringSplit($sRet,@LF,2)
	ElseIf $nMode=2 Then
		$Return=$sRet
	EndIf
	Return $Return
EndFunc

Проверил на таком файле:
Код:
125e
554
error45
87
error 47
7899error
Возвращает только 2 требуемые строки
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Спасибо всем, кто ответил. Почему-то не работает вариант со значком "^". Без него, как я показал выше, работает (но я не уверен, что будет сохранена только та строка, которая начинается со слова ERROR), а с ним (что, как вы говорите, гарантирует присутствие ERROR только в начале строки) - нет.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Значёк "^", по-моему, уместен когда ты в начале шаблона ставишь "(?m)".
 
Верх