Leer CSV de memoria y analizar
Este código adopta un enfoque diferente para leer un archivo de texto. En lugar de leer un registro cada vez, la macro carga todo el archivo de texto en la memoria en una sola variable de cadena. La macro analiza entonces la cadena en registros individuales. La ventaja de este método es que accede al archivo en disco solamente una vez. El resto de los siguientes procesamientos ocurre en memoria y es muy rápido.
Sub ReadTxtLines()
Dim sht As Worksheet
Dim fso As Object
Dim fil As Object
Dim txt As Object
Dim strtxt As String
Dim tmpLoc As Long
'Trabajar sobre una hoja activa
Set sht = ActiveSheet
'Eliminar los datos en la hoja
sht.UsedRange.ClearContents
'El objeto del sistema de archivos que necesitamos para gestionar archivos
Set fso = CreateObject("Scripting.FileSystemObject")
'El archivo que nos gustaría abrir y leer
Set fil = fso.GetFile("c:\test.txt")
'Abrir archivo como TextStream
Set txt = fil.OpenAsTextStream(1)
'Leer el archivo incluido en una variable de cadena de una vez
strtxt = txt.ReadAll
'Cerrar textstream y liberar el archivo. ya no lo necesitamos más.
txt.Close
'Buscar la primera ubicación de la nueva línea
tmpLoc = InStr(1, strtxt, vbCrLf)
'Pasar en bucle hasta que no haya más nuevas líneas
Do Until tmpLoc = 0
'Utilizar Columna A y la siguiente celda vacía para escribir la linea del archivo de texto
sht.Cells(65536, 1).End(xlUp).Offset(1).Value = _
Left(strtxt, tmpLoc - 1)
' Eliminar la línea analizada de la variable que incluimos en el archivo almacenado
strtxt = Right(strtxt, Len(strtxt) - tmpLoc - 1)
'Encontrar la siguiente ubicación de la nueva línea
tmpLoc = InStr(1, strtxt, vbCrLf)
Loop
'La última línea que tiene datos pero no nueva línea de caracteres
sht.Cells(65536, 1).End(xlUp).Offset(1).Value = strtxt
Set fso = Nothing
End Sub
Si te ha parecido interesante, comparte: Compartir
