Creo que he encontrado una manera muy eficiente de leer archivos muy, muy grandes línea por línea. Por favor dígame si sabe de una manera mejor/más rápida o vea un margen de mejora. Estoy tratando de mejorar en la codificación, por lo que cualquier tipo de consejo que tengas sería agradable. Esperemos que esto sea algo que otras personas puedan encontrarle útil también.¿Qué es una forma superrápida de leer archivos grandes línea por línea en VBA?
Parece ser algo así como 8 veces más rápido que usar entrada de línea de mis pruebas.
'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
¡Gracias por el asesoramiento!
Este es un muy buen punto. Estaba exagerando ingenuamente al usar dos muy. El tamaño de los archivos que estoy usando son de cinco a diez megabytes, y nunca más de cincuenta. – Justin
** La longitud máxima de una cadena de longitud variable ** en VB y VBA es de aprox. ** 2 mil millones de caracteres ** (también conocido como 2GB). (Fuente: [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
@ashleedawg, gracias por la información. Corrección leve: el límite es de 4 GB, ya que el tamaño de cada carácter es de 2 bytes (unicode). –