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

[效率算法] 查找字符串在ini或TXT文件中的行号

  [复制链接]
发表于 2015-4-22 10:30:58 | 显示全部楼层 |阅读模式
我需要查找字符串('123'),在文本(1.ini)中位于多少行,现在是这样写的
$str ='123'
local $line = 0

while 1
     $strline = fileReadLine('1.ini',$line) ;读取第$line行字符串
     $line =$line +1
       if  stringinstr($strline,$str,0) <> 0 then 如果$str('123')在这行字符串中
           msgbox(0,'',$line)                              显示行号
       end if
wend

效率太低了,3-5秒才有反应,因为文本差不多有上万行,有没有效率更高一点的办法?ini结构如下,可以改
[1]
s=dadjoaoifdjiaop
a=12343545646
b=11111
[2]
s=uopuiopuop
b=iop[iopp[
c=op[iuopyopi
 楼主| 发表于 2015-4-22 10:46:05 | 显示全部楼层
Ini 里面的内容放到txt里面也行
 楼主| 发表于 2015-4-22 10:46:07 | 显示全部楼层
Ini 里面的内容放到txt里面也行
发表于 2015-4-22 11:14:34 | 显示全部楼层
不知道你到底要干什么
 楼主| 发表于 2015-4-22 11:25:01 | 显示全部楼层
回 netegg
我有个文本文档
112233
445566
778899
qqwwee
aaasss
zzzxxxccc
qqqwww

然后有个字符串'qw'
我需要搜索字符串在这个文本文档里面,是第多少行
 楼主| 发表于 2015-4-22 11:26:48 | 显示全部楼层
用循环的方法是没有问题,但是内容比较多,返回的时间太长了
发表于 2015-4-22 12:37:00 | 显示全部楼层
本帖最后由 netegg 于 2015-4-22 12:39 编辑

如果没理解错的话,你的目的类似于数组的非全匹配查询
 楼主| 发表于 2015-4-22 15:23:31 | 显示全部楼层
111111
222222222
3333333
44444444444
55555555
请问'33'在第几行?
 楼主| 发表于 2015-4-22 17:22:47 | 显示全部楼层
已经用数组的方法完美解决了,过后贴上代码
发表于 2015-5-22 15:36:10 | 显示全部楼层
不知樓主是否能提供有效率的数组的解法?
我也正在做相同的東西.
謝謝.
发表于 2015-5-23 08:19:02 | 显示全部楼层
已经用数组的方法完美解决了,过后贴上代码
505807698 发表于 2015-4-22 17:22

全部读出到数组,再匹配?
发表于 2015-5-24 20:31:32 | 显示全部楼层
楼主试一下这个非常规的方法!

$f = FileOpen(@ScriptDir & "\123.txt", 10)
For $i = 1 To 100000
        If $i = 99958 Then
                FileWriteLine($f, Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & "qw" & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)))
        Else
                FileWriteLine($f, Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)) & Chr(Random(48, 57, 1)))
        EndIf
Next
FileClose($f)
$n = MsgBox(1, "", "10W文本生成完毕,现在开始计时" & @CRLF & "按确定开始")
If $n = 1 Then
        $time = TimerInit()
        $c = FileRead(@ScriptDir & "\123.txt")
        $num = StringInStr($c, "qw")
        $str = StringLeft($c, $num)
        StringReplace($str, @CRLF, "")
        $t = TimerDiff($time)
        MsgBox(0, "", "qw所在的行是" & @extended + 1 & @CRLF & "所用时间:" & $t & "ms")
EndIf
发表于 2015-5-25 11:23:57 | 显示全部楼层
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-19 12:10 , Processed in 0.079582 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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