在VBA中逐行读取大文本文件(250MB ++)

时间:2015-08-05 16:25:56

标签: string vba text

受帖子" Superfast way to read large files line-by-line in VBA. Please critique"的启发,我试验了这三种方法。但是"超快"使用Get的方法无法处理大于250MB的文件,因为Space(myFileLen)受VBA中String的最大长度限制。根据我的测试,VBA中字符串的最大长度为263,749,613,大约为251 MB。而另外两种方法实际上运行缓慢。 Currenly我想我只能选择Line Input方法。所以,亲爱的朋友们,您能否建议如何在VBA中处理这么大的文件?谢谢!

2 个答案:

答案 0 :(得分:0)

在Access中,我通常将文件作为链接表附加,然后使用SQL将行处理到另一个表中。

你想做什么?你的文件有多大。您是否希望将数据加载到Excel,访问或什么?

如果您使用excel,您可以考虑将文件加载到新的PowerPivot数据模型中,因为它旨在压缩数据并提供超高速聚合,因为它是一个柱状数据库。你可以使用DAX。

ħ

答案 1 :(得分:0)

如果它错了但我想把它扔掉那里,我冒着被投票的风险。

我注意到使用ADO似乎没有太多关于这个,是否被认为是缓慢或不好的做法?

Sub TestRead()
    MsgBox ReadTextFile("C:\Testdir\", "TEST.txt", 2)
End Sub

Function ReadTextFile(Path As String, MyFile As String, RowNum As Long)
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim adcomm As New ADODB.Command
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Path & ";Extended Properties='text;HDR=YES;FMT=Delimited'"
    rs.Open "Select * From " & MyFile, conn, adOpenStatic, adLockReadOnly, adCmdText
    rs.AbsolutePosition = RowNum
    If rs.EOF Then
        ReadTextFile = "Row " & RowNum & " is higher than the rowcount of the data"
    Else
        ReadTextFile = rs(0)
    End If
End Function

test.txt文件:

My Header
This text file is for testing ADO reading
This is a rather long line of text in comparison to the other lines of text in this text file
Short line

Schema.ini文件:

[TEST.txt]
Format=FixedLength

Col1=Column1 Text Width 999