我在日志文件中放置了一个唯一的 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