找回密码
 加入
搜索
查看: 1554|回复: 12

[AU3基础] [已解决]在txt文件中, 搜索多字符串并复制字符串的下一行字串, 依序印出

[复制链接]
发表于 2021-10-19 14:36:58 | 显示全部楼层 |阅读模式
本帖最后由 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.txt
HP
        100
MP
        100
Attack
        255
Speed
        255

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2021-10-19 15:32:13 | 显示全部楼层
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)
发表于 2021-10-19 15:04:35 | 显示全部楼层
憋了九年冒了第一个泡 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)

评分

参与人数 1金钱 +10 收起 理由
lai + 10 很给力!

查看全部评分

 楼主| 发表于 2021-10-19 15:11:42 | 显示全部楼层
本帖最后由 lai 于 2021-10-19 15:24 编辑

Haha, 版主,
因為搜索了九年 只能當聽眾, 無法上台表演
 楼主| 发表于 2021-10-19 15:24:25 | 显示全部楼层
afan 发表于 2021-10-19 15:04
憋了九年冒了第一个泡 O o 。.

另外請問
我嘗試加上其他非數字字串得出結果卻不是我預期


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2021-10-19 15:36:12 | 显示全部楼层
本帖最后由 lai 于 2021-10-19 15:44 编辑

受教了, 完美詮釋還需要去深入看完StringRegExp後的參數
发表于 2021-10-19 15:54:23 | 显示全部楼层
正则菜鸡附上我的方法,不知道是否对楼主有用
#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

评分

参与人数 1金钱 +10 收起 理由
lai + 10 很给力!

查看全部评分

 楼主| 发表于 2021-10-19 16:02:11 | 显示全部楼层
wow,
感謝sh1536, 測試也可行還有細節, 依樣感謝兩位大神afan, sh1536
发表于 2021-10-20 20:47:01 | 显示全部楼层
又学了一招,读取TXT数组显示于GUICtrlCreateEdit控件,速度更快。
发表于 2021-10-21 04:59:16 | 显示全部楼层
afan 发表于 2021-10-19 15:04
憋了九年冒了第一个泡 O o 。.

膜拜大佬   好久不见
发表于 2021-10-21 10:13:39 | 显示全部楼层
qop1831 发表于 2021-10-21 04:59
膜拜大佬   好久不见

我说的是楼主冒第一个泡,九年来第一帖 _ _||
我本人是分分钟见 ^ ^
 楼主| 发表于 2021-10-22 16:15:51 | 显示全部楼层

這事情要回到九年前...細說了
发表于 2021-10-23 10:43:11 | 显示全部楼层
afan 发表于 2021-10-21 10:13
我说的是楼主冒第一个泡,九年来第一帖 _ _||
我本人是分分钟见 ^ ^

好吧   看来是我太久没来逛了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-25 22:38 , Processed in 0.077405 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表