Что нового

[RegExp] Получение значений из логов.

pinbrain

Новичок
Сообщения
2
Репутация
0
Здравствуйте, уважаемые знатоки. Я новичок в AutoIT, столкнулся с такой проблемой:
Из текстового файла с логами необходимо извлечь значения. Проблема в том, что ориентир на это значение находится на строке ранее.
Вот пример:
Object №10 AdrBase=0x00(0) AdrObj=0x000B(11) FullAdrObj=0x0000000B(11)
....... (R32=0x43533908) R32=211.222778
Номер значения 11 (выделен красным) - это ориентир.
Само значение (которое нужно извлечь) 211.222778 (выделено зеленым).
Необходимо, задавая номер параметра (тот что красный) иметь возможность извлекать только само значение (то что зеленое).
В примерах по регулярным выражением, мы всегда работаем только с одной строкой, а как ориентируясь на предыдущую строку, извлечь значение из следующей не нашел.
В лог файлах все значения пишутся именно так, т.е. всегда одна строка заканчивается номером, а следующая заканчивается значением.

Как пример, кусок лога побольше:
Channel=1 ASDU=36 <Measured value, short floating point number with time tag CP56Time2a> Дата сообщения: 04/03/2014 18:17:34.00562
....... SQ=0(Set) Number of objects=16 Cause=1(Periodic/Cyclic) Common ASDU addr=0x0001 (1)
....... Object №0 AdrBase=0x00(0) AdrObj=0x0001(1) FullAdrObj=0x00000001(1)
....... (R32=0x4247FC5F) R32=49.996456
....... (QDS=0x00) OV=0(no overflow) BL=0(not blocked) SB=0(not substituted) NT=0(topical) IV=0(valid)
....... Time: 04-03-2014 втор. 18:17.34633 НЕдейств.,зима res1= 0
....... Object №1 AdrBase=0x00(0) AdrObj=0x0002(2) FullAdrObj=0x00000002(2)
....... (R32=0x4247FE6B) R32=49.998455
....... (QDS=0x00) OV=0(no overflow) BL=0(not blocked) SB=0(not substituted) NT=0(topical) IV=0(valid)
....... Time: 04-03-2014 втор. 18:17.34633 НЕдейств.,зима res1= 0
....... Object №2 AdrBase=0x00(0) AdrObj=0x0003(3) FullAdrObj=0x00000003(3)
....... (R32=0x4247FC3A) R32=49.996315
....... (QDS=0x00) OV=0(no overflow) BL=0(not blocked) SB=0(not substituted) NT=0(topical) IV=0(valid)
....... Time: 04-03-2014 втор. 18:17.34633 НЕдейств.,зима res1= 0
....... Object №3 AdrBase=0x00(0) AdrObj=0x0004(4) FullAdrObj=0x00000004(4)
....... (R32=0x45624B77) R32=3620.716553
....... (QDS=0x00) OV=0(no overflow) BL=0(not blocked) SB=0(not substituted) NT=0(topical) IV=0(valid)
....... Time: 04-03-2014 втор. 18:17.34633 НЕдейств.,зима res1= 0
....... Object №4 AdrBase=0x00(0) AdrObj=0x0005(5) FullAdrObj=0x00000005(5)
....... (R32=0x45628352) R32=3624.207520
....... (QDS=0x00) OV=0(no overflow) BL=0(not blocked) SB=0(not substituted) NT=0(topical) IV=0(valid)
....... Time: 04-03-2014 втор. 18:17.34633 НЕдейств.,зима res1= 0
....... Object №5 AdrBase=0x00(0) AdrObj=0x0006(6) FullAdrObj=0x00000006(6)
....... (R32=0x45653E0C) R32=3667.877930
....... (QDS=0x00) OV=0(no overflow) BL=0(not blocked) SB=0(not substituted) NT=0(topical) IV=0(valid)
....... Time: 04-03-2014 втор. 18:17.34633 НЕдейств.,зима res1= 0
....... Object №6 AdrBase=0x00(0) AdrObj=0x0007(7) FullAdrObj=0x00000007(7)
....... (R32=0x44447478) R32=785.819824
....... (QDS=0x00) OV=0(no overflow) BL=0(not blocked) SB=0(not substituted) NT=0(topical) IV=0(valid)
....... Time: 04-03-2014 втор. 18:17.34633 НЕдейств.,зима res1= 0
....... Object №7 AdrBase=0x00(0) AdrObj=0x0008(8) FullAdrObj=0x00000008(8)
....... (R32=0x4443A1D2) R32=782.528442
....... (QDS=0x00) OV=0(no overflow) BL=0(not blocked) SB=0(not substituted) NT=0(topical) IV=0(valid)
....... Time: 04-03-2014 втор. 18:17.34633 НЕдейств.,зима res1= 0

P.S. Необходима обработка текстового файла.
Заранее, огромное спасибо за помощь!
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
Local $sLog = ClipGet()
ConsoleWrite( __GetValue( $sLog, 1 ) & @LF)


Func __GetValue( ByRef $sLog, $iNum )
    Local $aResult
    ; ---
    If Not $sLog Or $iNum < 0 Then _
        Return SetError( 1, 0, 0 )

    $aResult = StringRegExp( $sLog, 'FullAdrObj=[^\(]+\(' & $iNum & '\)\r?\n?[^\)]+\) R32=([\d\.]+)', 3 )
    If IsArray( $aResult ) Then _
        Return $aResult[0]

    Return SetError( 2, 0, 0 )
EndFunc


Обновил
 
Верх