标题:两个文本文件如何按要求合并?
只看楼主
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:325
专家分:114
注 册:2010-2-17
结帖率:69.81%
已结贴  问题点数:15 回复次数:3 
两个文本文件如何按要求合并?
两个文本文件,A和B,A里面有40000条数据,B里面有28000条数据,都是一条一行,数据格式都一样:“a,b,c”。现在想从A文本里开始读起,读一条,就在B文本里搜寻前两个数字(a和b)一样的一条数据,如果找不到就在新建的文本文件C里写入A文件里的这一条,如果找到了,就在新建的文本文件C里写入B文件里的这一条(相当于用B文件里的这一条替换A文件里的这一条),最后,C文件里的条目数和A文件一致,C文件里的排列顺序和A文件一致。

我编写的程序如下:(问题:1、慢,想想要循环40000*28000次,10亿多次呢!怎么解决?
                          2、好象逻辑有错误,转出来的C文件与A文件完全一致,肯定应该不一致。)

程序代码:
Dim fn As Integer, str1 As String, str2 As String, tmp1, tmp2, i, j As Long
Dim a() As String
Dim b() As String
Dim cc As String
    fn = FreeFile
    Open "D:\A.txt" For Binary As #fn
        str1 = Input(LOF(fn), fn)
        tmp1 = Split(str1, vbCrLf, -1)
    Close #fn

    fn = FreeFile
    Open "D:\B.txt" For Binary As #fn
        str2 = Input(LOF(fn), fn)
        tmp2 = Split(str2, vbCrLf, -1)
    Close #fn
    
Open "D:\C.txt" For Append As #2
     For i = LBound(tmp1) To UBound(tmp1) - 1
         For j = LBound(tmp2) To UBound(tmp2) - 1
                       a = Split(tmp1(i), ",")
                       b = Split(tmp2(j), ",")
                     If a(0) = b(0) And a(1) = b(1) Then
                        cc = tmp2(j)
                        Else
                        cc = tmp1(i)
                     End If
        Next j
If cc <> "" And aa <> "" Then
            Print #2, cc
End If
    Next i
Close #2


文件:
A.rar (41.12 KB)
B.rar (30.84 KB)


请版主和路过的坛友及高手不吝赐教,多谢多谢!
搜索更多相关主题的帖子: 文本文件 文件 String For Split 
2019-07-09 10:44
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:15 
这不是和你在https://bbs.bccn.net/thread-493164-1-1.html里的问题一样么?我解答过的,用二维数组开关瞬间完成的,不超过1秒。

能编个毛线衣吗?
2019-07-10 09:33
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:325
专家分:114
注 册:2010-2-17
得分:0 
以下是引用wmf2014在2019-7-10 09:33:07的发言:

这不是和你在https://bbs.bccn.net/thread-493164-1-1.html里的问题一样么?我解答过的,用二维数组开关瞬间完成的,不超过1秒。



wmf2014大神,您的回帖我拜读过,也思考过,我觉得不合适本例,本例中有个要求是“C文件里的排列顺序和A文件一致”,可能是我的能力不够,根据您的回帖中的解答做不到这个要求。
2019-07-11 13:00
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
那也应该能触类旁通。
A的坐标包含B,先读入B的坐标作为开关值,再依次读入A,如果存在B的值则写入B,否则写入A,这样C的次序就和A一样了。伪代码如下:
dim b(1000,1000) as string
read b(x,y)
read a(x,y)
  if b(x,y)<>"" then
    write c(x,y)=b(x,y)
  else
    write c(x,y)=a(x,y)
end read a


能编个毛线衣吗?
2019-07-13 09:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-495765-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.295688 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved