505807698 发表于 2015-4-22 10:30:58

查找字符串在ini或TXT文件中的行号

我需要查找字符串('123'),在文本(1.ini)中位于多少行,现在是这样写的
$str ='123'
local $line = 0

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

效率太低了,3-5秒才有反应,因为文本差不多有上万行,有没有效率更高一点的办法?ini结构如下,可以改

s=dadjoaoifdjiaop
a=12343545646
b=11111

s=uopuiopuop
b=iop[iopp[
c=op[iuopyopi

505807698 发表于 2015-4-22 10:46:05

Ini 里面的内容放到txt里面也行

505807698 发表于 2015-4-22 10:46:07

Ini 里面的内容放到txt里面也行

netegg 发表于 2015-4-22 11:14:34

不知道你到底要干什么

505807698 发表于 2015-4-22 11:25:01

回 netegg
我有个文本文档
112233
445566
778899
qqwwee
aaasss
zzzxxxccc
qqqwww

然后有个字符串'qw'
我需要搜索字符串在这个文本文档里面,是第多少行

505807698 发表于 2015-4-22 11:26:48

用循环的方法是没有问题,但是内容比较多,返回的时间太长了

netegg 发表于 2015-4-22 12:37:00

本帖最后由 netegg 于 2015-4-22 12:39 编辑

如果没理解错的话,你的目的类似于数组的非全匹配查询

505807698 发表于 2015-4-22 15:23:31

111111
222222222
3333333
44444444444
55555555
请问'33'在第几行?

505807698 发表于 2015-4-22 17:22:47

已经用数组的方法完美解决了,过后贴上代码

ator916 发表于 2015-5-22 15:36:10

不知樓主是否能提供有效率的数组的解法?
我也正在做相同的東西.
謝謝.

ila 发表于 2015-5-23 08:19:02

已经用数组的方法完美解决了,过后贴上代码
505807698 发表于 2015-4-22 17:22 http://www.autoitx.com/images/common/back.gif
全部读出到数组,再匹配?

gto250 发表于 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

ator916 发表于 2015-5-25 11:23:57

我後來使用這裡的方法.
http://www.autoitx.com/forum.php?mod=viewthread&tid=29824
{:face (317):}
页: [1]
查看完整版本: 查找字符串在ini或TXT文件中的行号