[已解决]在txt文件中, 搜索多字符串并复制字符串的下一行字串, 依序印出
本帖最后由 lai 于 2021-10-19 15:36 编辑各位前輩, 找了很多字符串的帖子但沒有找到適合的, 有看到一個相關的方法但只能找一次, 以下是網路上找到的,
針對txt內的字串找到$search後複製下一行, 字符串HP 可以抓到 100這數值, 想請問如果我要搜尋一個文件但多個字串並抓取每字串的下一行呢?
#include <File.au3>
#include <Array.au3>
Global $file = @ScriptDir & "\test.txt", $search = "HP"
Global $iLine = 0, $sLine = '', $iValid = 0
Global $hFile = FileOpen($file)
If $hFile = -1 Then
MsgBox(0,'ERROR','Unable to open file for reading.')
Exit 1
EndIf
; find the line that has the search string
While 1
$iLine += 1
$sLine = FileReadLine($hFile)
If @error = -1 Then ExitLoop
; test the line for the $search string until the flag $iValid is set
If StringInStr($sLine, $search) And Not $iValid Then
$iValid = 1
ContinueLoop
EndIf
If $iValid Then
$iValid += 1
ConsoleWrite($iLine & ':' & $sLine & @CRLF)
If $iValid > 1 Then ExitLoop
EndIf
WEnd
FileClose($hFile)
test.txtHP
100
MP
100
Attack
255
Speed
255
lai 发表于 2021-10-19 15:24
另外請問
我嘗試加上其他非數字字串得出結果卻不是我預期
你在一楼以及示例都是“数值”,现在的显然不是,当然不会捕获。所以,示例要尽量全面
#include <Array.au3>
Local $sFileRead = FileRead(@ScriptDir & '\test.txt')
Local $sKeys = 'test|Speed' ;需搜索的多个关键字,以|分隔
Local $aRE = StringRegExp($sFileRead, '(?mi)^\h*(' & $sKeys & ')\h*\v+\h*(\V+)', 3)
_ArrayDisplay($aRE) 憋了九年冒了第一个泡 O o 。.
#include <Array.au3>
Local $sFileRead = FileRead(@ScriptDir & '\test.txt')
Local $sKeys = 'HP|Speed' ;需搜索的多个关键字,以|分隔
Local $aRE = StringRegExp($sFileRead, '(?mi)^\h*(' & $sKeys & ')\h*\v+\h*(\d+)', 3)
_ArrayDisplay($aRE) 本帖最后由 lai 于 2021-10-19 15:24 编辑
Haha, 版主,
因為搜索了九年 只能當聽眾, 無法上台表演:face (37): afan 发表于 2021-10-19 15:04
憋了九年冒了第一个泡 O o 。.
另外請問
我嘗試加上其他非數字字串得出結果卻不是我預期
本帖最后由 lai 于 2021-10-19 15:44 编辑
受教了, 完美詮釋還需要去深入看完StringRegExp後的參數:face (12):
正则菜鸡附上我的方法,不知道是否对楼主有用
#include <File.au3>
#include <Array.au3>
Global $file = @ScriptDir & "\test.txt", $search = "HP|Attack"
Global $hFile = FileOpen($file)
If $hFile = -1 Then
MsgBox(0,'ERROR','Unable to open file for reading.')
Exit 1
EndIf
$a = search($search)
MsgBox(0, "", @error ? "查询错误代码:" & @error : $a)
_Exit()
Func search($iSearch)
If $iSearch = "" Then Return SetError(1)
Local $SearchArr = StringSplit($iSearch, "|", 2)
Local $iLine = 1, $sLine = '', $sLine_1 = ''
Local $Return = ''
While 1
$sLine = FileReadLine($hFile, $iLine)
If @error = -1 Then ExitLoop
$sLine_1 = FileReadLine($hFile, $iLine + 1)
_ArraySearch($SearchArr, $sLine)
If @error = 0 Then
$Return &= $iLine & '-' & $sLine & ":" & $sLine_1 & @CRLF
EndIf
$iLine += 2
WEnd
If $Return = "" Then Return SetError(2)
$Return = StringStripWS($Return, 2)
Return SetError(0, "", $Return)
EndFunc
Func _Exit()
FileClose($hFile)
Exit 0
EndFunc
wow,
感謝sh1536, 測試也可行還有細節, 依樣感謝兩位大神afan, sh1536 又学了一招,读取TXT数组显示于GUICtrlCreateEdit控件,速度更快。 afan 发表于 2021-10-19 15:04
憋了九年冒了第一个泡 O o 。.
膜拜大佬 好久不见:face (26): qop1831 发表于 2021-10-21 04:59
膜拜大佬 好久不见
我说的是楼主冒第一个泡,九年来第一帖 _ _||
我本人是分分钟见 ^ ^ :face (27):
這事情要回到九年前...細說了 afan 发表于 2021-10-21 10:13
我说的是楼主冒第一个泡,九年来第一帖 _ _||
我本人是分分钟见 ^ ^
好吧 看来是我太久没来逛了:face (24):
页:
[1]