程序代码:
Dim filename As String
Dim path As String
Dim jg() As String '结果数组
Dim jgj As Long
Dim RFWz As Long '文件读取的位置
Const SS = " Site Failed tests/Executed tests"
Const SE = "========================================================================="
Const 分段大小 = 4096 '4k
Private Sub readfile()
Dim fs As Long
Dim fr As Long
fr = FreeFile()
Dim b As String * 分段大小 '读出来的字串
Dim fj() As String '分解数据
Dim sqc As String '前一次的数据
Dim i As Long '循环变量
Dim jjg As Boolean '是否记录内容
If RFWz = 0 Then RFWz = 1
Open path & filename For Binary Access Read As #fr
fs = LOF(fr)
Do While RFWz < fs
Get #fr, RFWz, b '不足的部分不会读。因是按 vbcrlf 分段,所以不影响最终结果
RFWz = Seek(fr)
fj = Split(b, vbCrLf)
fj(0) = sqc & fj(0)
For i = 0 To UBound(fj)
If fj(i) = SS Then
jjg = True
jgj = jgj + 1
ReDim Preserve jg(jgj)
End If
If jjg Then
jg(jgj) = jg(jgj) & vbCrLf & fj(i)
End If
If fj(i) = SE Then
jjg = False
End If
Next i
Loop
Close #1
End Sub
Private Sub Command1_Click()
Dim t1 As Date
Dim t2 As Date
Dim t3 As Date
Label2.Caption = ""
Label3.Caption = ""
t1 = Now()
Label1.Caption = t1
DoEvents
Call readfile
Text1.Text = jg(jgj)
t2 = Now()
Label2.Caption = t2
t3 = t2 - t1
Label3.Caption = t3
End Sub
Private Sub Form_Load()
path = App.path
If Right(path, 1) <> "\" Then
path = path & "\"
End If
filename = "1.txt"
'Erase jg
jgj = 0
End Sub
--------------------------------
测试运行时间,约4秒,没去计算具体的时间
但在读文件的过程中,后台可以继续写这个文件,新增部分不会被读取到。估计与VB打开文件后,在缓冲区写了文件大小有关。
我测试时,使用 copy 命令直接再复制一份,不影响当前打开的文件执行。
然后我的程序里,随着文件增大,如果没有退出程序,就会从新增部分直接开始读,已读过了的部分不会再读了。
所以每增加一份(139M),继续运行读盘时间也约是 4秒 。
你这一个文件里包含了 944 节的内容,我这个代码会把这 944节的每节最后汇总起来。
---------------------
如果你系统每次写盘间隔在 5秒以上,那么可以这样读。