2016-06-09 2 views
0

У меня есть уникальный идентификатор, размещенный в файле журнала, я могу искать файл и добираться до него, как только я найду уникальный идентификатор в файле, который мне нужен найти другую строку (назвав ее строкой 2) после этого уникального идентификатора и скопировать самую следующую строку строки 2.найти строку в файле журнала и искать другую строку после первой строки

Ниже вы найдете мою функцию и, пожалуйста, предложите, как этого добиться.

Func getAuthResponse($LogfilePath, $AuthRespFilePath, $UniqueId, $search) 

Global $iLine = 0, $sLine = '' 
Global $hFile = FileOpen($LogfilePath) 

If $hFile = -1 Then 
MsgBox(0,'ERROR','Unable to open file for reading.') 
Exit 1 
EndIf ;If $hFile = -1 Then 

; find the line that has the search string 
While 1 
$iLine += 1 
$sLine = FileReadLine($hFile) 

If @error = -1 Then ExitLoop 
    ; finding the unique id in the log file 

    ;ConsoleWrite($UniqueId & @LF) 
    If StringInStr($sLine, $UniqueId) Then 
    ConsoleWrite($sLine & @LF) 
    ; assuming that unique id is found , now finding the phrase Auth response is as follow : after the unique id 
    $sNewLine = $sLine+ 
    If StringInStr($sLine, $search) Then 
     ConsoleWrite($sLine & @LF) 

     //// SOME LOGIC //// 

    ExitLoop 
    EndIf  ;If StringInStr($sLine, $search) Then 

    ExitLoop 
    EndIf  ;If(StringInStr($sLine, $UniqueId) Then 

WEnd  ;While 1 
FileClose($hFile) 
EndFunc 

ответ

0

Давайте посмотрим, если я правильно понял, что:

Вам нужно найти идентификатор, afther этот идентификатор строки и после этого вам нужно скопировать следующую строку. Если это правильно, я сделал вам новую петлю While, это всего лишь петля For.

#include <File.au3> 
For $c1 = 1 To _FileCountLines($hFile) Step +1 
    $sLine = FileReadLine($hFile, $c1) 
    If (StringInStr($sLine, $UniqueId) > 0) Then 
     For $c2 = $c1 To _FileCountLines($hFile) Step +1 
      $sLine = FileReadLine($hFile, $c2) 
      If (StringInStr($sLine, $search) > 0) Then 
       $LINE_AFTER_STRING_2 = FileReadLine($hFile, $c2 + 1) 
       ExitLoop 
      EndIf 
     Next 
    EndIf 
Next 

If $LINE_AFTER_STRING_2 = "" Then MsgBox(0, "NOT FOUND", "NOT FOUND") 

происходят следующие вещи: во-первых она перебирает все линии и ищет для вашего ID, если он находит его, он начинает новый For Loop и ищет вашу строку после идентификатора, если он считает, что один он считает +1 к строке и читает ее. Это должна быть линия, которую вы ищете. Переменная называется $LINE_AFTER_STRING_2, не стесняйтесь ее изменять.

Не забудьте включить File.au3, потому что я использовал _FileCountLines

+0

ее не работает для меня. –

+0

Это не очень полезно. Что не работает? Какой код выполняет ошибку. Этот код не проверен, и я просто сделал это очень быстро. – IkeRoyle

0

Попробуйте это:

#include <File.au3> 

Func getAuthResponse($LogfilePath, $UniqueId, $search) 

    Local $arrayFile = "" 
    Local $output = "" 

    If Not FileExists($LogfilePath) Then Return SetError(1, 0, -1) 

    _FileReadToArray($LogfilePath, $arrayFile) 

    For $i = 1 To $arrayFile[0] 
     If StringInStr($arrayFile[$i], $UniqueId) Then 
      For $j = $i+1 To $arrayFile[0] 
       If StringInStr($arrayFile[$j], $search) Then 
        $output = $arrayFile[$j+1] 
        ExitLoop 
       EndIf 
      Next 
      ExitLoop 
     EndIf  
    Next 

    Return $output 

EndFunc