我相信我已经想出了一种非常有效的方式来逐行读取非常大的文件。请告诉我,如果你知道更好/更快的方式或看到改进的余地。我试图在编码方面做得更好,所以你的任何建议都会很好。希望这是其他人可能会觉得有用的东西。什么是在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