[已解决]怎么获取匹配字符串在文本的行数?
本帖最后由 jasonyan97 于 2012-1-12 21:15 编辑有一个文本,内容为:
111111
222222
333333
444444
555555
666666
想获得内容222222在这个文本的第几行? 本帖最后由 xiehuahere 于 2012-1-12 21:10 编辑
#include <file.au3>
Dim $aRecords, $line
Dim $isFound = 0
If Not _FileReadToArray("test.txt", $aRecords) Then
MsgBox(4096, "Error", " Error reading log to Array. Error Number: " & @error)
Exit
EndIf
For $line = 1 to $aRecords
If $aRecords[$line] == "222222" Then
$isFound = 1
ExitLoop
EndIf
Next
If $isFound Then
Msgbox(0, '', 'Found. Line ' & $line)
Else
Msgbox(48, '', 'Not found!')
EndIf 谢谢了#2,解决了!!{:face (427):} Func _FileLineFindKey($sFileName, $sKey)
Local $str = FileRead($sFileName)
Local $iStart = StringInStr($str, $sKey)
If @error Then Return SetError(1)
Local $str1 = StringMid($str, 1, $iStart)
StringRegExpReplace($str1, @CRLF, '')
Return @extended + 1
EndFunc ;==>_FileLineFindKey 但如果换成不是数字就不行了吗?
比如文本是:
111111
d:\2222
333333
444444
要确定d:\在文本的第几行?这样又该如何写呢? afan版主,再帮我看看吧?#2换成不是数字就不行了,
比如文本内容是:
111111
d:\2222
333333
444444
要确定d:\在文本的第几行?又或者d:\可能在文本的任意位置,又可能出现在第三行中间,又可能出现在第四行尾部,这样又该如何来获取第几行呢? 回复 4# afan
前段时间,论坛里不是有位哥们做过这样的实验,
最后的结论是StringReplace处理效率比StringRegExpReplace要快一些,
所以这里StringRegExpReplace($str1, @CRLF, '')
换成StringReplace可能更好点儿{:face (280):} 回复 7# binghc
这里我开始就是用的StringReplace,后来发现比StringRegExpReplace慢~ 回复 8# afan
afan版主,再帮我看看6#的问题吧,我不想再发新帖求助,但问题没能解决呀。 回复 9# jasonyan97
第9行改为 If StringInStr($aRecords[$line], "222222") Then 回复 8# afan
Func _FileLineFindKey($str, $sKey)
Local $iStart = StringInStr($str, $sKey)
If @error Then Return SetError(1)
Local $str1 = StringMid($str, 1, $iStart)
Local $time=TimerInit()
;~ StringRegExpReplace($str1, @CRLF, '')
StringReplace($str1, @CRLF, '')
$time=TimerDiff($time)
ConsoleWrite($time&@LF)
Return @extended + 1
EndFunc ;==>_FileLineFindKey
$str='111111'&@CRLF& _
'222222'&@CRLF& _
'333333'&@CRLF& _
'444444'&@CRLF& _
'555555'&@CRLF& _
'666666'
ConsoleWrite(_FileLineFindKey($str, '222222')&@LF)
我反复测试,StringReplace都要比StringRegExpReplace快!你再试试?!{:face (280):} 回复 10# afan
恩。。谢谢AFAN,完美解决! 回复 11# binghc
你用个稍大的文件试试,这个只有几字节,看不出结果~ 其实楼主这问题可以扩展一下,可以写个udf,在一个大文本中,在那些行有指定的子字符串{:face (280):} 回复 13# afan
是你说过再小也能看出来的{:face (356):},小文件也确实能看出效率差别,要不你上传个大点儿的文件,再贴上要找的内容