Что нового

[Данные, строки] Как найти различные по признакам значения в строке текстового файла.

  • Автор темы at
  • Дата начала
A

at

Гость
День Добрый, Всем!

Прошу помочь. Есть лог файл, информация в котором постоянно обновляется. Нужно отловить строку по принакам вхождения в нее следующих слов и словосочетаний: «INFO», «Script:(Script:blum:C)», «Класс», «на старте»

Пример строки логфайла:

12:20:06.31[13]INFO :200:Info:Script:(Script:blum:C):2127571444:Класс 2127571444 на старте 3 бота SТH2 по версии сервера вход. Команда выполнена за 1647 мс.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
at,
А если таких строчек много, то какая из них нужна?
Так должно найти все.
Код:
#include <Array.au3>

$sText = '12:20:06.31[13]INFO :200:Info:Script:(Script:PC):2127571444:Класс 2127571444 на старте 3 бота SТH2 по версии сервера вход. Команда выполнена за 1647 мс.' & _
		@CRLF & '12:22:06.31[13]INFO :200:Info:Script:(Script:PC):2127571444:Класс 2127571444 старте 3 бота SТH2 по версии сервера вход. Команда выполнена за 1647 мс.'

$aText = StringRegExp($sText, '(?m)^(.*?)\[.*?INFO.*?Script:\(Script:PC\).*?Класс.*?на старте.*$', 3)
$aText_1 = StringRegExp($sText, '(?m)^(.*?\[.*?INFO.*?Script:\(Script:PC\).*?Класс.*?на старте.*)\r$', 3)
_ArrayDisplay($aText, 'Date')
_ArrayDisplay($aText_1, 'All string')
 
Автор
A

at

Гость
madmasles, спасибо, помогли разобраться.

В других строках этого логфайла попадаются слова "INFO" в нижнем регистре, т.е. "info".
Вопрос: Как правильно применить флаг (?i) к слову "INFO", чтобы было строгое соответствие шаблону.
 

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
at
Код:
(?i:info)
 
Автор
A

at

Гость
AZJIO, благодарю за подсказку, но дело в том, что я не правильно поставил вопрос, потому, что допустил ошибку. Флаг (?i) отключает чувствительность к регистру, т.е. в моем случае его применять не следует.

Остался, правда другой вопрос, ответа я к сожалению на него не нашел.
Как правильно в строке:
$aText = StringRegExp($sText, '(?m)^(.*?)\[.*?INFO.*?Script:\(Script:blum:C\).*?Класс.*?на старте.*$', 3)
указать переменную в этом месте «Script:(Script:$vPC
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
at [?]
указать переменную в этом месте «Script:(Script:$vPC
Наверное так :
Код:
$vPC="PC"
$aText = StringRegExp($sText, '(?m)^(.*?)\[.*?INFO.*?Script:\(Script:' & $vPC & '\).*?Класс.*?на старте.*$', 3)
 
Автор
A

at

Гость
Спасибо, Всем за помощь.


Добавлено:
Сообщение автоматически объединено:

Прошу подсказать, где ошибка в моем скрипте:

Код:
Global $vPC='PC'
Global $File = @ScriptDir & '\prog.log'
Global $sText = FileRead($File)

While 1
		 $aText = StringRegExp($sText, '(?m)^(.*?)\[.*?INFO.*?Script:\(Script:' & $vPC & '\).*?Класс.*?на старте.*$', 3)
		 If $aText Then
			 Sleep(1000)
			 Start()
		 EndIf
WEnd

Func Start()
		Sleep(10)
MsgBox(0, 'Успех', '', 1)
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
at [?]
где ошибка в моем скрипте
Код:
Global $vPC = 'PC', $sFile = @ScriptDir & '\prog.log', $sText

While 1
	$sText = FileRead($sFile)
	If StringRegExp($sText, '(?m)^(.*?\[.*?INFO.*?Script:\(Script:' & $vPC & '\).*?Класс.*?на старте.*)$') Then
		Start()
	EndIf
	Sleep(5000);проверка каждые 5 сек.
WEnd

Func Start()
	MsgBox(0, 'Успех', '', 1)
EndFunc   ;==>Start
 
Автор
A

at

Гость
madmasles, спасибо.
 
Верх