strcontent为长字符串.F = FreeFile
Open app.path & "\mystr.ini" For Input As #F
Do Until EOF(F)
Line Input #F, str''将str替换成空
if instr(strcontent,str)>0 then
  strcontent=replace(strcontent,str,"")
end if''其他字符与str组合,再过滤
strtemp= "AA" & str
if instr(strcontent,strtemp)>0 then
  strcontent=replace(strcontent,strtemp,"")
end ifstrtemp= str & "BB" 
if instr(strcontent,strtemp)>0 then
  strcontent=replace(strcontent,strtemp,"")
end ifstrtemp= str & "CC" & "899"
if instr(strcontent,strtemp)>0 then
  strcontent=replace(strcontent,strtemp,"")
end if......
......
......
......
......
......组合过滤比较多loop在mystr.ini里,每行是一个关键字,大概有6000行.全部循环完,感觉非常慢.请问有什么好一点办法嘛???

解决方案 »

  1.   

    错误更改,,LOOP下面少了一行..
    Close #F
      

  2.   

    你看看逻辑
    if instr(strcontent,str)>0 then
      strcontent=replace(strcontent,str,"") 
    你在这里已经把str替代结束了,怎么能找到"AA" & str的字符串呢?你后面那些能找到么?
    end if''其他字符与str组合,再过滤
    strtemp= "AA" & str
    if instr(strcontent,strtemp)>0 then
      strcontent=replace(strcontent,strtemp,"")
    end if也许我分析错了,你再看看实在不行就给客户一个进度条
      

  3.   

    不要判断,直接调用 replace
      

  4.   

    你替换的规则是怎么样?
    是在mystr.ini中的任一行数据str,
    把这三种组合"AA" & str,str & "BB" 和str & "CC899"的字符串
    都替换为""吗?
      

  5.   

    是这样,strcontent里面,不一定有这个关键字组合,所以需要判断一下,有这个关键字组合则过滤掉..即,if instr(strcontent,strtemp)>0 then end..这6000多个关键字,在一个strcontent里,有可能没有一条符合条件,有可能有多条符合条件..但却需要全部判断,过滤一遍.
      

  6.   

    TO:clear_zero(clear_zero) 
    谢谢你的意见,我说的是有问题..这个判断应该放到最后,前面应该放str & "BB" 等等组合的关键字过滤...
    if instr(strcontent,str)>0 then
      strcontent=replace(strcontent,str,"")
    end if
      

  7.   

    TO:cangwu_lee(橙子)
    直接替换会快嘛,,谢谢,,我试一下.
      

  8.   

    For VB5 user:
    Public Sub ReplaceAll(ByRef sOrigStr As String,  _
                ByVal sFindStr As String, _
                ByVal sReplaceWithStr As String, _
                Optional bWholeWordsOnly As Boolean)
    '
    ' Replaces all occurances of sFindStr with sReplaceWithStr
    '
        Dim lPos As Long
        Dim lPos2 As Long
        Dim sTmpStr As String
        Dim bReplaceIt As Boolean
        Dim lFindStr As Long
        On Error GoTo vbErrorHandler    lFindStr = Len(sFindStr)    lPos2 = 1
        bReplaceIt = True
        sTmpStr = sOrigStr    Do
            lPos = InStr(lPos2, sOrigStr, sFindStr)
            If lPos = 0 Then
                Exit Do
            End If
            If bWholeWordsOnly Then
                On Error Resume Next
                If lPos = 1 Or (Mid$(sOrigStr, lPos - 1, 1) = " ") Then
                    If (Mid$(sOrigStr, lPos + lFindStr, 1) = " ") Or Mid$(sOrigStr, lPos + lFindStr + 1, 1) = "" Then
                        bReplaceIt = True
                    Else
                        bReplaceIt = False
                    End If
                End If
            End If
            If bReplaceIt Then
                If lPos > 1 Then
                    sTmpStr = Left$(sOrigStr, lPos - 1)
                Else
                    sTmpStr = ""
                End If
                sTmpStr = sTmpStr & sReplaceWithStr
                sTmpStr = sTmpStr & Mid$(sOrigStr, lPos + lFindStr, Len(sOrigStr) - (lPos + lFindStr - 1))
                sOrigStr = sTmpStr
            End If
            lPos2 = lPos + 1
        Loop
        sOrigStr = sTmpStr
        Exit SubvbErrorHandler:
        Err.Raise Err.Number, "StrHandler ReplaceAll", Err.Description
    End Sub
      

  9.   

    TO:junki(『.NET技术争霸天下』) 
    你好,我说的意思是,有N多种组合,如果符合条件就要过滤掉,一条长字符串中,有可能一条也没有符合的组合关键字.但是6000多条str也要全运行一圈
      

  10.   

    不要判断,直接调用 replace
      

  11.   

    这种问题想快都难。6000条内容,再加上N种组合,6000*N 次循环,还是处理VB不善长的大字符串处理,加进度条吧!另外,少一个 instr() 判断应该会快许多。
      

  12.   

    楼主考虑一下正则表达式--------
    www.vicmiao.com
    努力就有美好时光!
      

  13.   

    可以将文件读入一个字符串变量,然后再对该字符串变量进行replace操作,如果应用中需要每一行的数据,再用split函数分解。这样避免在循环中频繁调用replace函数,replace函数可以将字符串中所有要替换的内容一次性完成。
    希望这个思路与你的应用不冲突!
      

  14.   

    这样:
    每读出一句的判断还是要的。因为你的所有组合,都是包含 str 的,因此若长字符串不包含 str ,其他的所有操作都可以省掉,直接处理下一句。F = FreeFile
    Open app.path & "\mystr.ini" For Input As #F
    Do Until EOF(F)
    Line Input #F, strif instr(strcontent,str) then
      strcontent=replace(strcontent,"AA" & str,"")
      strcontent=replace(strcontent,str & "BB","")
      strcontent=replace(strcontent,str & "CC" & "899","")
      strcontent=replace(strcontent,str,"")
    end ifloop
    Close #F
      

  15.   

    AA,BB.....这些处理一次就行了吧?为什么要放在每一个line中?
      

  16.   

    AA,BB.....这些处理一次就行了吧?为什么要放在每一个line中?
    -------------------------
    哦,是我糊涂了 !
      

  17.   

    TO:VBAdvisor(Sunlight):
    这个函数不错,但过滤的关键字组合太多,也是同样的问题,反应慢.
      

  18.   

    TO:theforever(碧海情天)
    呵呵,不是测CPU呀..不是没事干..
      

  19.   

    直接用REPLACE替换,,效率差不多,慢呢.
      

  20.   

    TO:fxy_2002(阿勇)
    这种问题想快都难。
    6000条内容,再加上N种组合,6000*N 次循环,还是处理VB不善长的大字符串处理,加进度条吧!
    另外,少一个 instr() 判断应该会快许多-------------------------
    是呀,现在希望以最快的速度处理完这个长字符串,把里面不需要的过滤掉.加进度条没意义了.
    因为内容里的关键字未知,所以必须得把关键字组合起来全部循环一圈..
      

  21.   

    呵呵,感谢大家的关注..60太少了
    我决定,如果有好的解决办法,我会另开贴
    提供最好的解决办法的GG,MM,将直接得到100分..跟贴者有分..
      

  22.   

    想不通为什么楼主要一行一行的读文件,慢的不是处理字符串,而是循环读文件。    Dim i       As Integer
        Dim v()     As Byte
        Dim s       As String
        
        i = FreeFile()
        
        Open App.Path & "\mystr.ini" For Binary As i
            ReDim v(LOF(i) - 1)
            Get i, , v()
        Close i
        
        s = StrConv(v, vbUnicode)
        
        s = Replace(s, "AA", "")
        s = Replace(s, "BB", "")
        s = Replace(s, "CC899", "")
        ' ...你用这种方式来看看速度如何。
      

  23.   

    呵呵,有些同学看代码不仔细啊!
    楼主的目的显然不是要处理 mystr.ini 这个文件,而是要使用它里面内容作为的配对条件。所以一次性读取文件和一行行读取差距不会太明显。of123 的方法是可以改进不少的,因为 str 如果不存在,其它的配对就不会存在。加一个判断后能大幅减速少判断次数!!加进度条不会增加处理速度,但能使界面友好,感觉就会“快”一些。关键字数量未知很容易解决,先计算出 ini 文件的行数就可以了。
      

  24.   

    接着fj182(阿花) 的写下去
    dim b() as string
    dim i as long
    dim u as long
    b=split(s,vbcrlf)
    u=ubound(b)
    for i=0 to u
     strcontent=b(i)
      
    next i
    用这方法得到的strcontent和楼主在do循环中的strcontent有什么区别?
    正如楼上所说,楼主不是要处理mystr.ini文件,但是,首先,用fj182(阿花) 的方式与每行读取的方式与逐行读文件的方式速度不在一个数量级,其二,避免了在循环中用replace,这肯定可以加快处理速度的,即使后面再用循环取strcontent,也只是相当于楼主的do循环次数,但少了replace操作。
      

  25.   

    改正:
    正如楼上所说,楼主不是要处理mystr.ini文件,但是,首先,用fj182(阿花) 的方式与逐行读文件的方式速度不在一个数量级,其二,避免了在循环中用replace,这肯定可以加快处理速度的,即使后面再用循环取strcontent,也只是相当于楼主的do循环次数,但少了replace操作。
      

  26.   

    不知道楼主的主要目的是什么,按照楼主的想法,首先去掉"AA" & str,再str & "BB",但是如果有这样的情况,即"A" & str & "BB""A" & str,如果先找"AA" & str则找不到,再找str & "BB",找到并置空,而这个时候"AA" & str却出现了。这样楼主的程序就会出现问题。因此每一行只有在所有的关键字都找不到的情况才能认为ok了,这样无疑更加大了计算量。所以我觉得楼主还是应该把真正的相关需求说出来,看看有没有其他比较好的方法把问题绕过去,否则就是钻入死胡同了。
      

  27.   

    我再说一下我的目的:
    比如:
    我一天中,要处理几万条内容
    在mystr.ini里面,汇集了部分需要过滤的关键字,这是在以前的内容里找出来的
    每行是一个关键字,如,第一行是北京,第二行是上海,第三行是天津....IF内容里,有与mystr.ini里的关键字相匹配的字符串,THEN就要过滤掉
    IF内容里,没有与mystr.ini里的关键字相匹配的,THEN判断,不用过滤.如果想知道每条内容里,有没需要过滤的字符串,那么就得与mystr.ini里的全部关键字符串进行判断,全部循环一遍.
    循环每个关键字时,还要加其他的组合,进行判断,过滤.代码如下:大家看仔细了..处理其中的一条内容
    mystr.ini里面是关键字,每行一个关键字
    strcontent=此内容长字符串.
    str=关键字  F = FreeFile
      Open app.path & "\mystr.ini" For Input As #F
        Do Until EOF(F)
          Line Input #F, str      ''其他字符与str组合,再过滤      ''组合过滤1
          strtemp= "AA" & str
          if instr(strcontent,strtemp)>0 then
            strcontent=replace(strcontent,strtemp,"")
          end if      ''组合过滤2
          strtemp= str & "BB" 
          if instr(strcontent,strtemp)>0 then
            strcontent=replace(strcontent,strtemp,"")
          end if      ''组合过滤3
          strtemp= str & "CC" & "899"
          if instr(strcontent,strtemp)>0 then
            strcontent=replace(strcontent,strtemp,"")
          end if      ''组合过滤N      ''组合过滤N+1
          ......
          ......
          ......
          ......
          ......组合过滤比较多      ''直接将str替换成空
          if instr(strcontent,str)>0 then
            strcontent=replace(strcontent,str,"")
          end if    Loop  Close #F在mystr.ini里,每行是一个关键字,大概有6000行.全部循环完,感觉非常慢.请问有什么好一点办法嘛???再说说加组合的目的:
    比如关键字='北京'时,内容里有可能存在'AA北京'或者'北京BB',这时需要替换为空.
    因为关键字的不确定性,所以加了IF ... THEN 判断,再使用REPLACE替换.
      

  28.   

    大家不要再考虑此代码的逻辑问题
    还有'AA','BB'的前后顺序问题.此代码只是想表达我的意图.我有过的想法:
    1.如果循环到符合条件的关键字,替换为空,然后跳出DO循环,继续下一条内容
    因为每条内容里最多有一次符合条件的关键字或者组合
    但是,在内容里如果没有符合的,str肯定还是要全部循环全.
    其实大部分内容还是不需要过滤的.2.将str关键字存到数组里,循环,判断,感觉还是慢2.大家用过哈希表嘛.
      

  29.   

    需要关注的:hn123(苗濤[www.vicmiao.com]) :
    楼主考虑一下正则表达式--------
    www.vicmiao.com
    努力就有美好时光!
    -----------------------------------------------------------------------
    VBToy(无证编程):
    可以将文件读入一个字符串变量,然后再对该字符串变量进行replace操作,如果应用中需要每一行的数据,再用split函数分解。这样避免在循环中频繁调用replace函数,replace函数可以将字符串中所有要替换的内容一次性完成。
    希望这个思路与你的应用不冲突!-----------------------------------------------------------------------
    of123() :
    这样:
    每读出一句的判断还是要的。因为你的所有组合,都是包含 str 的,因此若长字符串不包含 str ,其他的所有操作都可以省掉,直接处理下一句。F = FreeFile
    Open app.path & "\mystr.ini" For Input As #F
    Do Until EOF(F)
    Line Input #F, strif instr(strcontent,str) then
      strcontent=replace(strcontent,"AA" & str,"")
      strcontent=replace(strcontent,str & "BB","")
      strcontent=replace(strcontent,str & "CC" & "899","")
      strcontent=replace(strcontent,str,"")
    end ifloop
    Close #F-----------------------------------------------------------------------
    fj182(阿花):
    想不通为什么楼主要一行一行的读文件,慢的不是处理字符串,而是循环读文件。    Dim i       As Integer
        Dim v()     As Byte
        Dim s       As String
        
        i = FreeFile()
        
        Open App.Path & "\mystr.ini" For Binary As i
            ReDim v(LOF(i) - 1)
            Get i, , v()
        Close i
        
        s = StrConv(v, vbUnicode)
        
        s = Replace(s, "AA", "")
        s = Replace(s, "BB", "")
        s = Replace(s, "CC899", "")
        ' ...你用这种方式来看看速度如何。-----------------------------------------------------------------------
    fxy_2002(阿勇):
    呵呵,有些同学看代码不仔细啊!
    楼主的目的显然不是要处理 mystr.ini 这个文件,而是要使用它里面内容作为的配对条件。所以一次性读取文件和一行行读取差距不会太明显。of123 的方法是可以改进不少的,因为 str 如果不存在,其它的配对就不会存在。加一个判断后能大幅减速少判断次数!!加进度条不会增加处理速度,但能使界面友好,感觉就会“快”一些。关键字数量未知很容易解决,先计算出 ini 文件的行数就可以了。
    -----------------------------------------------------------------------
    VBToy(无证编程):
    接着fj182(阿花) 的写下去
    dim b() as string
    dim i as long
    dim u as long
    b=split(s,vbcrlf)
    u=ubound(b)
    for i=0 to u
     strcontent=b(i)
      
    next i
    用这方法得到的strcontent和楼主在do循环中的strcontent有什么区别?
    正如楼上所说,楼主不是要处理mystr.ini文件,但是,首先,用fj182(阿花) 的方式与逐行读文件的方式速度不在一个数量级,其二,避免了在循环中用replace,这肯定可以加快处理速度的,即使后面再用循环取strcontent,也只是相当于楼主的do循环次数,但少了replace操作。-----------------------------------------------------------------------
    VBAdvisor(Sunlight):
    For VB5 user:
    Public Sub ReplaceAll(ByRef sOrigStr As String,  _
                ByVal sFindStr As String, _
                ByVal sReplaceWithStr As String, _
                Optional bWholeWordsOnly As Boolean)
      

  30.   

    如果想提速,就只能在VB的内置函数上下功夫了。这个6000*N的LOOP再减,也还是很大的。
    重写一下INSTR函数,我记得网上有人贴过这个算法,速度会提高很多。
      

  31.   

    看一下如下例子体会一下replace一次进行多次替换的效果:
    Dim s As String
    s = "adfasfsffsfsaf"
    Debug.Print Replace(s, "a", "X")
    相信上述例子中的替换速度比用下面的速度快
    for i=1 to len(s)
       t=mid(s,i,1)
       t=replace(t,"a","X")
       newStr=newStr & t
    next i实际上就替换操作来说,本来只用调用N次的,但在楼主的思路中可能要调用6000*N次。这就像登山,有索道直接上山顶,但如果要绕着上去,无论是走路还是开车,也快不了的。
      

  32.   

    我搞不懂楼主的逻辑关系。
    1、将str替换成空
    2、其他字符与str组合,再过滤
    这第一步已经把str消灭了,后面的组合就不存在了。
    strtemp= "AA" & str 
    等于是 strtemp= "AA" & "" 
    等于是 strtemp= "AA"
    楼主可能是要先消灭组合的,最后消灭str。如果是这样,又有一个麻烦,"AA" & str & "BB",怎么考虑?
      

  33.   

    1、其实慢的不是比较的速度,而是字符串被改变重新分配内存的速度。因此建议楼主使用定长字符串,足够空间的定长字符串,这肯定会提高速度。象strcontent就可以声明为全局的,减少临时字符串的使用。
    2、再就是尽力不使用会产生临时字符串的函数。比如类似strcontent = replace()。可以使用Instr函数替代,找到位置后用自己的replace函数。自己的replace函数使用copymemory,速度是很快的。总之就是减少内存分配的次数。
    3、另外还有一个办法就是优化关键字数据结构。这个方法很多的,比如树状结构。
      

  34.   

    YaDa() 看错了吧,呵呵。
    和我先前一样,以为这样只要处理一次AA、BB之类的就可以了。不过看到下面发现是先处理str和AA。BB之类的组合,最后再过虑掉str
      

  35.   

    回vbman2003(家人): 
    看倒是没看错,只不过后来他改进了。
    同意VBToy(无证编程):
    “本来只用调用N次的,但在楼主的思路中可能要调用6000*N次”
    Replace是很快的,我试过:200多K的文本,调用80次,替换了几千个数据,毒龙850CPU,一秒之内完成。
      

  36.   

    LZ 请把你的源代码,和 INI 文件发送到 [email protected]
      

  37.   


    TO fj182(阿花) ,VBToy(无证编程):你们下面的代码,,运行到了最后,还是要想法替换的呀.我也试过,用的是数组,速度还是慢..------------------------------------------------
        Dim i       As Integer
        Dim v()     As Byte
        Dim s       As String
        
        i = FreeFile()
        
        Open App.Path & "\mystr.ini" For Binary As i
            ReDim v(LOF(i) - 1)
            Get i, , v()
        Close i    
        s = StrConv(v, vbUnicode)    Dim b() As String
        Dim ii As Long
        Dim u As Long
        b = Split(s, vbCrLf)
        u = UBound(b)
        For ii = 0 To u
            strcontent = b(ii)
            '''这里要进行组合,过滤,替换
            .................
            .................
        Next ii
      

  38.   

    TO YaDa():
    你这只是调用了80次,我这需要6000次之多,,关键字的组合N多..只运行这个程序的话,,大概需要3秒左右的时间...处理完一条内容..如果内容条数多了,数据肯定会积压...这就是我想法快的原因...如果同一台机器上还运行着其他占CPU的程序,那这样会更慢了..大于3秒.
      

  39.   

    TO jjkk168(老加班的人--好好学习,天天吃饭):
    请问,如何进行JOIN????呵呵,没用过.
      

  40.   

    对整个 mystr.ini 进行替换,干嘛要一行一行进行?关键词组合N多,就替换 N 次嘛。
      

  41.   

    主要原因是每一次替换都要对整个字符串进行重写。把该字符串读入bit数组当中,再操纵数组,每次替换就只变化一个字节。速度就快了
    Dim b() as Byte,
    b() = "source"
      

  42.   

    1 读取整个文档,进行替换
    2 要替换的关键字要考虑考虑,如先替换 str,哪么再替换"AA"就行了,不用再替换"AA" & str,替换关键字越短,速度越快!
    3 不用instr查找了,替换和查找差不多是一个过程,你一个过程重复两次,没有意义
      

  43.   

    建议你改用C写或者用C写一个动态库让VB调用,这样会快很多的
      

  44.   

    呵!一个多月没来,想不到赶上了这么热闹的一个贴子!这热闹我一定要凑凑^_^问题很绕人,看了前面各位高见,我所想到的第一步优化,已被提过了:
    就是对硬盘IO的读取越少越好,的确,IO速度相对内存速度来说根本不在一个数量级,而每次从硬盘读1Byte与1MByte确是同一数量级的耗时,减少IO操作次数,当然是首选优化;当然,光这一点是不够的,因为这个代码集中了两种低速操作,IO读写与变长字符串再赋值,前者优化了,后者在这里也是回避不了的,我觉得当务之急还是应该减少循环的次数!LZ的思路有一个漏洞:先后替换,会造成误杀,
    比如:strcontent包括如下内容:
    “关键AA关键字1字2”
    当你替换完“AA关键字1”后,strcontent就变成了“关键字2”,这样本不包含的“关键字2”,会在下轮替换中被误杀了。我想换一个思路来解决,那就是,先将所有关键字替换成一个统一的、不可能在关键字中出现的固定字串,如:“%#%$^%^^&^%^%^*&&*”,然后,再将“AA”、“BB”之类的,与它组合在最后分别替换。
    简单算一下:原来的循环量是6000*N次,而采用上述方案后,循环量只有6000+N次,速度几乎可提高N倍。示例:
    Open App.Path & "\mystr.ini" For Binary As i
            ReDim v(LOF(i) - 1)
            Get i, , v()
        Close i    
        s = StrConv(v, vbUnicode)    b = Split(s, vbCrLf)
        u = UBound(b)
        For ii = 0 To u
            strcontent = replace(strcontent,b(ii),"%#%$^%^^&^%^%^*&&*")        
        Next ii
    strcontent = replace(strcontent,"AA%#%$^%^^&^%^%^*&&*","")  
    strcontent = replace(strcontent,"BB%#%$^%^^&^%^%^*&&*","")  
    strcontent = replace(strcontent,"CC%#%$^%^^&^%^%^*&&*","")  
    ....      
    strcontent = replace(strcontent,"%#%$^%^^&^%^%^*&&*","") LZ说原代码要3秒多,这样一改应该在1秒以下了吧。速度快了,误杀也可避免了(当然也不是绝对避免,只是概率要小得多)不知,各位以为如何?
      

  45.   

    补充:
    其实使用像 "%#%$^%^^&^%^%^*&&*" 这样长的标记串,可能没必要,在正常文本中是不会出现vbNullChar字符(即Chr$(0))的,除非LZ对字符串有特殊需要,否则最佳的标记串就用这一个字符即可,理论上,这也会提升替换速度。具体效果,LZ可自己试试。
      

  46.   

    TO:homezj(小吉):
    谢谢你..前面我说过,不用考虑关键字的顺序问题,不会出现误杀..你的思路非常好,值得研究一下.只是,我前面提到过.内容里,最多只会有一个关键字需要替换为空.也可能没有..因为关键字的未知性,就是说,你不知道这条内容里,是不是有那6000多条关键字,所以只有把所有的关键字全循环一圈..
      

  47.   

    TO cqcpl():
    试过,使用数组循环与打开文件读取时的DO循环速度差不多.主要是处理关键字组合时,速度受影响.
      

  48.   

    若最多只会有一个关键字被替换,那你这个问题就非常简单了。因为,这个代码,速度慢在String的不断重新赋值上,尤其是当原串很长时,会极慢的。按你这么一说,代码可很简单!程序流程这样写:
    For ii = 0 To u
            if instr(1,strcontent,b(ii))>0  then exit for
    Next
    if ii<=u then
        if instr(1,strcontent,"AA" & b(ii))>0  then 
            strcontent = replace(strcontent,"AA" & b(ii),"") 
            exit sub
        end if 
        if instr(1,strcontent,"BB" & b(ii))>0  then 
             strcontent = replace(strcontent,"BB" & b(ii),"") 
             exit sub
        end if 
        ......
        strcontent = replace(strcontent, b(ii),"") 
    end if还有,你可以将准备用于组合的“AA”、“BB”之类的字符串,预先存入数组,那后面这段就可用一个循环搞定了,不用写那么多代码。replace不管是否替换了内容,都会引起字符串重新赋值,所以先用instr很有必要!instr是很快的,前面那个6000次循环查找,在大多数机器上都是10毫秒以下的操作,后面最多也只有一次replace重新赋值,所以我预测,这样的代码在主流机器上运行,不应该超过10毫秒。没有什么必要再需优化的了。要见识instr的速度,你可参见下面的贴子:
    http://community.csdn.net/Expert/topic/5603/5603824.xml?temp=.6377832
    这个贴子里,我测试过的代码,查找5M长的字串,得出几百万个结果,也不过几十毫秒,你这个就更不在话下了。
      

  49.   

    TO:homezj(小吉)
    非常感谢小吉的回复..虽然分数有点少..下次一定多放分..给大家补上.
      

  50.   

    请注意,instr 的速度相当的快!!!但是应该这么写:L = instr(XXX,YYY)如果你用 instr(XXX,YYY) ,则速度会慢很多倍。