'#####serach big file (ADODB.Recordset) →it is fast#####
Sub searchLineFromText()
Dim CN As ADODB.ConnectionDim RS As ADODB.Recordset
Dim rsList As Collection
Dim tempStr As String
Set CN = New ADODB.Connection
Set rsList = New Collection
CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=D:\work_forfree\20160313_for_vba_open_bigfile\;" & _
"Extended Properties='text;HDR=NO;CharacterSet=65001'"
'FMT=Delimited
Set RS = CN.Execute("SELECT * FROM testfile.txt WHERE F1 LIKE '%ERROR%'")
Do Until RS.EOF
'Debug.Print RS.Fields(0); RS.Fields(1); RS.Fields(2)
tempStr = RS.Fields(0)
rsList.Add tempStr
RS.MoveNext
Loop
Set RS = Nothing
Set CN = Nothing
End Sub
'#####read &write file (ADODB.Recordset)→it is slowly#####
'write file
Sub writeFileFromList(outFileUrl, mylist As Collection, CharSet)
Set Stm = CreateObject("adodb.stream")
Stm.Type = 2
Stm.Mode = 3
Stm.CharSet = CharSet
Stm.Open
For Each myRow In mylist
Stm.WriteText myRow
Next
Stm.SaveToFile outFileUrl, 2
Stm.Flush
Stm.Close
Set Stm = Nothing
End Sub
'read file
Function readTextFile(fileUrl, myCharSet) As Collection
Dim rsArr As Variant
Dim tmpStr As String
Dim rsList As Collection
Set rsList = New Collection
Set Stm = CreateObject("adodb.stream")
'data type
Stm.Type = adTypeText 'adTypeBinary
'Authority
'Stm.Mode = 1
Stm.CharSet = myCharSet
Stm.Open
Stm.LoadFromFile (fileUrl)
Dim temp1 As Variant
temp1 = Stm.ReadText(adReadAll)
rsArr = temp1.Split(vbLf)
For Each i In rsArr
tmpStr = i
rsList.Add tmpStr
Next
Stm.Close
Set Stm = Nothing
Set readTextFile = rsList
End Function
Sub mymain()
Call readTextFile("D:\work_forfree\20160313_for_vba_open_bigfile\testfile.txt", "UTF-8")
End Sub
本文介绍了两种使用VBA结合ADODB组件处理大文件的方法:通过ADODB.Recordset快速搜索文件,以及使用ADODB.Stream进行读写操作。示例代码展示了如何设置指定编码,如UTF-8,以实现高效读取和写入大文件。
3855

被折叠的 条评论
为什么被折叠?



