在txt文件中,如何去掉里面重复的行,每行的长短不一,但是形式一样,都是用12个";"将其分开。
文件大小在1M左右。
本人VB刚入门,此问题一直困惑着本人在工作中的一些数据处理问题
如果只有几兆大小,方案就非常多了
VB codeOption Explicit
Private Declare Function GetTickCount Lib "kernel32.dll" () As Long
Private Sub Command1_Click()
Dim Buff As String, LineBuff() As String, OutBuff() As String
Dim I As Long, J As Long
Dim lTime As Long
lTime = GetTickCount
Open "d:\temp\test.txt" For Binary As #1
Buff = Space(LOF(1)) '一次读入内存
Get #1, , Buff
Close #1
J = -1
LineBuff() = Split(Buff, vbCrLf) '按行分割
ReDim OutBuff(0)
For I = 0 To UBound(LineBuff) '逐行比较是否有重复
If InStr(1, Join(OutBuff(), " "), LineBuff(I), vbTextCompare) = 0 Then
J = J + 1 '没有重复,就增加到输出缓冲区
ReDim Preserve OutBuff(J)
OutBuff(J) = LineBuff(I)
End If
Next
Open "d:\temp\testout.txt" For Binary As #1 '将输出缓冲区内容写入到文件
Put #1, , Join(OutBuff(), vbCrLf)
Close #1
MsgBox GetTickCount - lTime '计算耗时
End Sub
随便写的一个,都还行.
测试文件是你那几行内容不断复制,一共是14.8M最终大小,共491029行.
在我机器上耗时11.2秒左右完成替换.
最终输出结果是如下三行:
1;2;3;4;5;6;7;8;9;10;11;12
1;2;3;4;5;6;7;asda8;9;10;11;12a
1;2;3;4;5;6;7;8;9;asdasd10;11;12b
想要更快需要考虑其它方案了.
1 文件的删减添加,在实际操作中都是创建新文件。但是可以在写好以后,删除旧文件,将新文件改为旧名。
2 用你的数据做了一个 1.2M 的文件来测试。结果处理时间不到一秒。注意将 LstBox 控件的 Visible 设置为不可见。免得更新界面耽误时间。