我相信我已經想出了一種非常有效的方式來逐行讀取非常大的文件。請告訴我,如果你知道更好/更快的方式或看到改進的餘地。我試圖在編碼方面做得更好,所以你的任何建議都會很好。希望這是其他人可能會覺得有用的東西。什麼是在VBA中逐行讀取大文件的超快方法?
它似乎比使用我的測試中的線路輸入快8倍。
'This function reads a file into a string. '
'I found this in the book Programming Excel with VBA and .NET. '
Public Function QuickRead(FName As String) As String
Dim I As Integer
Dim res As String
Dim l As Long
I = FreeFile
l = FileLen(FName)
res = Space(l)
Open FName For Binary Access Read As #I
Get #I, , res
Close I
QuickRead = res
End Function
'This function works like the Line Input statement'
Public Sub QRLineInput(_
ByRef strFileData As String, _
ByRef lngFilePosition As Long, _
ByRef strOutputString, _
ByRef blnEOF As Boolean _
)
On Error GoTo LastLine
strOutputString = Mid$(strFileData, lngFilePosition, _
InStr(lngFilePosition, strFileData, vbNewLine) - lngFilePosition)
lngFilePosition = InStr(lngFilePosition, strFileData, vbNewLine) + 2
Exit Sub
LastLine:
blnEOF = True
End Sub
Sub Test()
Dim strFilePathName As String: strFilePathName = "C:\Fld\File.txt"
Dim strFile As String
Dim lngPos As Long
Dim blnEOF As Boolean
Dim strFileLine As String
strFile = QuickRead(strFilePathName) & vbNewLine
lngPos = 1
Do Until blnEOF
Call QRLineInput(strFile, lngPos, strFileLine, blnEOF)
Loop
End Sub
感謝您的建議!
這是一個非常好的點。我非常天真地使用兩個非常誇張的東西。我使用的文件的大小大約是五到十兆,並且從不超過五十。 – Justin 2009-09-09 14:05:01
在VB和VBA中,可變長度字符串**的**最大長度約爲。 ** 20億字符**(又名2GB)。 (來源:[VBA](https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/data-type-summary)&[VB](https://docs.microsoft。 com/en-us/dotnet/visual-basic/language-reference/data-types/data-type-summary)) – ashleedawg 2018-01-02 07:00:36
@ashleedawg,感謝您的信息。稍微修正:由於每個字符的大小爲2個字節(unicode),所以限制爲4GB。 – 2018-01-02 10:12:30