在日志文件中查找一个字符串,并在第一个字符串之后搜索另一个字符串



我在日志文件中放置了一个唯一的 ID,我可以搜索该文件并访问它,一旦我在文件中找到唯一 ID,我需要在这个唯一 ID 之后找到另一个字符串(命名为字符串 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 

让我们看看我是否正确理解了这一点:

您需要找到一个 ID,在此 ID 之后是一个字符串,然后您需要复制下一行。如果这是正确的,我给你做了一个新的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 循环并在 ID 后搜索您的字符串,如果找到该行,它会将 +1 计入该行并读取它。这应该是您要查找的线路。该变量称为 $LINE_AFTER_STRING_2 ,请随意更改它。

不要忘记包含File.au3,因为我使用了_FileCountLines

试试这个:

#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

最新更新