[VBA]读取文件常用的方法(ADODB.recordSet|ADODB.stream)(大文件读取&指定encode)

'#####serach big file (ADODB.Recordset) →it is fast#####

Sub searchLineFromText()

  Dim CN As ADODB.Connection
  Dim 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基本)