设有1.txt 和2.txt两个文本文件,2个文件里有很多条记录,1条记录1行。每条记录46个字符,但每行都有换行回车,最后一行没有换行回车,所以如果有11条记录,总大小是(46+2)*10+46。
我想做一个字符串对比的小程序,要把1.txt里有而2.txt里没有的那些记录存到3.txt里。
我的做法是从1.txt取一条记录,逐一与2.txt里的记录对比,如果相同则退出,取1.txt的下一条记录。“相同”的判断规则是只要对比的两条记录的第13至37个字符相同,就判定2条记录相同,如123456789012aaaaaaaaaaaaaaaaaaaaaaaa1111111111和
333333333333aaaaaaaaaaaaaaaaaaaaaaaa2222222222是相同的
程序如下
但出错,请各位大虾指点Private Sub Command1_Click()
    Dim first As String * 48, second As String * 48
    Dim linenum2 As Integer, counter2 As Integer
    first = ""
    second = ""
    Open "1.txt" For Input As #1
    Open "2.txt" For Input As #2
    Open "3.txt" For Output As #3    linenum2 = (LOF(2) - 46) / 48 + 1'统计2.txt的行数    Do While Not EOF(1)
        Line Input #1, first
        Do While Not EOF(2)
            counter2 = counter2 + 1
            Line Input #2, second
            If Mid(first, 13, 37) = Mid(second, 13, 37) Then
                Exit Do
            Else
                If counter2 >= linenum2 Then
                    Print #3, Trim(first)
                    Exit Do
                End If
            End If
        Loop
    Loop
    Close #1
    Close #2
    Close #3
End Sub提问:
1  1.txt和2.txt都是2M左右大小的,是否文件太大了
2  有没有直接统计行数的函数
3  我在用逐句调试时,本地窗口里的first变量永远是"abc","abc"是我第一次调试时1.txt的第一行,但我后来把1.txt删了重新输入其他字符串,本地窗口里的first变量还是abc",怎么回事啊

解决方案 »

  1.   

    大略看了下,应该没问题啊,txt文件能到2M上去,可能真的数据太大了,不如这样,既然你的数据这么多,不如分成三步走,把txt中的每一行都读出来插到list1控件中,1.txt读到list1中
    Open app.path & "/1.txt" For Input As #1    Do While (Not EOF(1))
            Line Input #1, strTemp
            List1.AddItem strTemp
        Loop
     Close #1
    2.txt读到list2中,同样的道理
    然后比较list1和list2中的就行了,满足条件的加如list3中,这样的话你就不用统计满足条件的条数了,完成比较后直接看list3.listcount就可以了,把list3中的数据写到3.txt中去适当的给几个进度条比较好一点
      

  2.   

    比较的代码估计也要这么写
    dim i as Integer ,dim j as Integer ,x as boolean
    for i=1 to list1.listcount
        for j=1 to list2.listcount
             if mid(list1.list(i),13)=mid(list2.list(j),13) then
                  x=true
             else
                  x=false
             end if
         next
         if x=false then
             list3.additem list1.item(i)
         end if
    next
    你试下看有没有问题先吧
      

  3.   

    上面的判断写错了,不应该for 的,应该用do while 或者for each的,具体怎么写自己搞吧,吃饭先
      

  4.   

    是我自己逻辑没弄好 现在好了 代码如下 分享一下  谢谢楼上的大虾
    Private Sub Command1_Click()
        Dim first As String * 24, second As String * 24
        Dim linenum2 As Long, counter2 As Long
        first = ""
        second = ""
        Open "D:\新建文件夹\1.txt" For Input As #1
        Open "D:\新建文件夹\2.txt" For Input As #2
        Open "D:\新建文件夹\3.txt" For Output As #3    linenum2 = (LOF(2) - 24) / 26 + 1    Do While Not EOF(1)
            Line Input #1, first
            Seek #2, 1
            Do While Not EOF(2)
                counter2 = counter2 + 1
                Line Input #2, second
    '            If Mid(first, 13, 24) = Mid(second, 13, 24) Then
                If first = second Then
                    counter2 = 0
                    Exit Do
                Else
                    If counter2 >= linenum2 Then
                        Print #3, first
                        counter2 = 0
                        Exit Do
                    End If
                End If
            Loop
        Loop
        Close #1
        Close #2
        Close #3
        End
    End Sub