关于查询关键字的问题!【已解决】
本帖最后由 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
在这个基础 上是否可以变成多个关键字的查询,然后再输出到文件呢。。。 我是从贴子中直接复制出来的。上面的代码。。看上去。好像有160这几个字符多出来。。我想方不成问题的吧。。希望有知道的朋友。。可以进来帮一下忙。。看看。。是否可以在大神的贴子中。加以修改呢。。 没有大神进来看一下的吗。。。是这个修改。。比较马烦的吗。 你想干嘛,说清楚一点,方便给你处理。 xyx115 发表于 2019-2-25 13:02
你想干嘛,说清楚一点,方便给你处理。
我是看到上面贴子的大神发布的这个源码,,是可以查询关键字,然后,提取出来。输出到文本文件的,,,但是这个只能是单一关键字查询,,是否可以增加多个关键字呢。。。这个我不太懂。。所以来请教 各位大神,帮忙看一下。。是不是可以在这个源码上修改一下就可以实现呢。 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
可以试试~
_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 @errorThen 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 & '\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 afan 发表于 2019-2-27 18:39
可以试试~
_StringKeyLine2File(FileRead('test.txt'), '关键字1' & @LF & '关键字2', 'new.txt')
...
好的。。多谢版主了。我去试试。。谢谢了。 xyx115 发表于 2019-2-27 16:41
谢谢你的回复。我测试一下先。 进来学习一下
页:
[1]