回 帖 发 新 帖 刷新版面

主题:求助!for循环嵌套问题(查过资料,但无法解决,请大虾相助。)。

一、模块功能
    1、将字符串mapdata按text2。text中的字符生成数组maparray;
    2、查找字符串数组maparray中有多少个road。txt中的字符(我用分号分隔)。

二、问题
    1、统计从road。txt中第二字符开始结果为0(统计结果应该不为0);
    2、输出到text3。text时,从第二行开始一行内的文字分两行排列;
       例如正确输出为  AB3
                       BB4
           错误输出为  AB3
                       B
                       B4
    3、想将统计结果追加到text3。text不成功。

三、已尝试过的方法
    1、第一个问题我尝试改变road。txt中字符的排列顺序,结果还是一样;
    2、第二个问题我尝试用输出简单的数字(即代码中的x,y),输出结果正确;
    3、第三个问题我尝试增加了wordstr变量,结果还是一样。

四、原代码
Private Sub Command1_Click()
maparray = Split(mapdata, Text2.Text)
maploop = UBound(maparray)
Open "road.txt" For Binary As #1
roaddata = StrConv(InputB(LOF(1), 1), vbUnicode)
roadname = Split(roaddata, ";")
roadloop=ubound(roadname)
For y = 0 To roadloop
objsum = 0
For x = 1 To maploop
    p = InStr(maparray(x), roadname(y))
    If p > 0 And p < 2100 Then
       objsum = objsum + 1
    End If
Next x
wordstr = wordstr + roadname(y) & Text2.Text & objsum & vbCrLf
Text3.Text = wordstr
Next y
Close #1
End Sub

回复列表 (共10个回复)

沙发

给出你演算时的mapdata、Text2.Text、"road.txt"的值,看看。

板凳

第3个问题,很显然,应该使用:Text3.Text = Text3.text & wordstr才能追加。

3 楼

一、mapdata的数据(文件有10多M,内容都一样,选了部分)
    0101      4501030101004494    aaaa    4501050301    bbbb   4501050301  bbbb   4501050301  bbbb   45010300201001        cccc           完好     在用    2007-5-10   实测  0.70m 铸铁            0101      4501030101004494    aaaa    4501050301    bbbb   4501050301  bbbb   4501050301  bbbb   45010300201001        cccc           完好     在用    2007-5-10   实测  0.70m 铸铁                                                                                                                                         
二、text2.text的数据为aaaa

三、road.txt的数据为cccc;dddd

4 楼

我运行的结果text3的内容为:
ccccaaaa2
ccccaaaa2
ddddaaaa0
不知道是不是你要的结果?

5 楼

把string转为byte() ,然后用kmp算法,在处理大文件的时候,比你现在至少快20倍以上,
KMP,就是逐字节对比,当遇到不符合的时候,就立即跳到下一个字节。这个比较适合字串搜索和
出现次数的统计。

6 楼

经我测试  split的处理速度是很慢的,这个函数没有优化

7 楼

回老大徒伤悲,我想要的结果如下:
ddddaaaa1
ccccaaaa2

我刚才重新运行的程序,road.txt的内容为 cccc;dddd 结果为
ccccaaaa2
dddd
aaaa0

以上结果也是有问题的,可是改变road.txt的内容为 dddd;cccc 结果就正常了。
ddddaaaa1
ccccaaaa2

改变road.txt的内容为 cccc;dddd 结果就正常了,怎么回事?
ccccaaaa2
ddddaaaa1

8 楼

回brokenworld
我是个菜鸟,您提供的方法,我先找下资料,实在搞不清楚再向您请教。

9 楼

你单步运行看看。你的程序很不好理解。

10 楼

问题基本解决,是road.txt文件中最后一个字符串引发的,但是原因不是很清楚,空了再慢慢研究。

谢谢大家的帮助。

我来回复

您尚未登录,请登录后再回复。点此登录或注册