找回密码
 加入
搜索
查看: 1915|回复: 9

[AU3基础] 关于查询关键字的问题!【已解决】

  [复制链接]
发表于 2019-2-22 16:01:06 | 显示全部楼层 |阅读模式
本帖最后由 ttmv2019sx 于 2020-5-20 09:25 编辑

引用大神  afan    的回贴内容:_StringKeyLine(FileRead('test.txt'), '关键字', 'new.txt')

Func _StringKeyLine($str, $Key, $NewFile = '', $FOMode = 2)
        ;[可选]$NewFile        写入新文件的文件名
        ;[可选]$FOMode        写入新文件模式:= 1 追加;= 2 覆写
        Local $sR, $Out, $FO
        $sR = StringRegExp($str, '(?<=^|\n)\V*\Q' & $Key & '\E\V*', 3)
        If @error Then Return SetError(1, 0, '')
        For $i = 0 To UBound($sR) - 1
                $Out &= $sR[$i] & @CRLF
        Next
        If $NewFile = '' Then Return $Out
        If $FOMode <> 2 Then $FOMode = 1
        $FO = FileOpen($NewFile, $FOMode)
        FileWrite($FO, $Out)
        FileClose($FO)
EndFunc   ;==>_StringKeyLine


在这个基础 上是否可以变成多个关键字的查询,然后再输出到文件呢。。。
 楼主| 发表于 2019-2-23 16:07:06 | 显示全部楼层
我是从贴子中直接复制出来的。上面的代码。。看上去。好像有160这几个字符多出来。。我想方不成问题的吧。。希望有知道的朋友。。可以进来帮一下忙。。看看。。是否可以在大神的贴子中。加以修改呢。。
 楼主| 发表于 2019-2-25 11:24:18 | 显示全部楼层
没有大神进来看一下的吗。。。是这个修改。。比较马烦的吗。
发表于 2019-2-25 13:02:13 | 显示全部楼层
你想干嘛,说清楚一点,方便给你处理。
 楼主| 发表于 2019-2-27 11:17:55 | 显示全部楼层
xyx115 发表于 2019-2-25 13:02
你想干嘛,说清楚一点,方便给你处理。

我是看到上面贴子的大神发布的这个源码,,是可以查询关键字,然后,提取出来。输出到文本文件的,,,但是这个只能是单一关键字查询,,是否可以增加多个关键字呢。。。这个我不太懂。。所以来请教 各位大神,帮忙看一下。。是不是可以在这个源码上修改一下就可以实现呢。
发表于 2019-2-27 16:41:12 | 显示全部楼层
ttmv2019sx 发表于 2019-2-27 11:17
我是看到上面贴子的大神发布的这个源码,,是可以查询关键字,然后,提取出来。输出到文本文件的,,,但 ...
Func _StringKeyLine($str, $Key, $NewFile = '', $FOMode = 2)
        
        ;--------------------------------------------------------------------
        ;[可选]$NewFile写入新文件的文件名
        ;[可选]$FOMode写入新文件模式:= 1 追加;= 2 覆写
        Local $sR, $Out, $FO
        $sR = StringRegExp($str, '(?<=^|\n)\V*\Q' & $Key & '\E\V*', 3)
        If @error Then Return SetError(1, 0, '')
        For $i = 0 To UBound($sR) - 1
                $Out &= $sR[$i] & @CRLF
        Next
        ;上面的代码为替换$str中所有存在的字符串。
        ;--------------------------------------------------------------------
        
        If $NewFile = '' Then Return $Out
        If $FOMode <> 2 Then $FOMode = 1        
        ;如果文件打开模式为写入模式(删除之前的内容),则更改为:写入模式(追加数据到文件尾部)
        ;--------------------------------------------------------------------
        $FO = FileOpen($NewFile, $FOMode)
        FileWrite($FO, $Out)
        FileClose($FO)
        ;追加新字符串到文件中。
        ;--------------------------------------------------------------------
EndFunc   ;==>_StringKeyLine
发表于 2019-2-27 18:39:50 | 显示全部楼层
可以试试~
_StringKeyLine2File(FileRead('test.txt'), '关键字1' & @LF & '关键字2', 'new.txt')

Func _StringKeyLine2File($sString, $sKey, $FileName = '', $FOMode = 2)
        ;$sKey - 关键字,如有多个关键字可用回车换行符连接,如 ‘关键字1’ & @LF & ‘关键字2’
        ;[可选]$FileName        写入文件的文件名
        ;[可选]$FOMode        打开写入文件模式:= 1 追加;= 2 覆写
        Local $aSR, $sOut, $hFO
        Local $aTmp, $sTmp = ''
        $aTmp = StringRegExp($sKey, '\V+', 3)
        If @error  Then Return SetError(1, 0, '')
        If UBound($aTmp) > 1 Then
                For $ii = 0 To UBound($aTmp) - 1
                        $sTmp &= StringRegExpReplace($aTmp[$ii], '(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)', '\\$1') & '|'
                Next
                $aSR = StringRegExp($sString, '(?m)^\V*(?:' & StringTrimRight($sTmp, 1) & ')\V*', 3)
        Else
                $aSR = StringRegExp($sString, '(?m)^\V*\Q' & $aTmp[0] & '\E\V*', 3)
        EndIf
        If @error Then Return SetError(2, 0, '')
        For $ii = 0 To UBound($aSR) - 1
                $sOut &= $aSR[$ii] & @CRLF
        Next
        If $FileName = '' Then Return $sOut
;~         If $FOMode <> 2 Then $FOMode = 1
        $hFO = FileOpen($FileName, $FOMode)
        FileWrite($hFO, $sOut)
        FileClose($hFO)
EndFunc   ;==>_StringKeyLine2File
 楼主| 发表于 2019-3-4 15:56:43 | 显示全部楼层
afan 发表于 2019-2-27 18:39
可以试试~
[au3]_StringKeyLine2File(FileRead('test.txt'), '关键字1' & @LF & '关键字2', 'new.txt')

...

好的。。多谢版主了。我去试试。。谢谢了。
 楼主| 发表于 2019-3-4 15:58:00 | 显示全部楼层

谢谢你的回复。我测试一下先。
发表于 2019-3-4 22:02:23 | 显示全部楼层
进来学习一下
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-20 10:40 , Processed in 0.073449 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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