VBA 读取大型 utf8 csv 的第一行

问题描述 投票:0回答:1

我尝试使用 ADODB 只读取大型 utf8 文件的第一行。

出于我的目的,我只需要 csv 中第一行的值(具有表格的标题)

Public Sub stream()
    Fullpath = "path to File"
    Set stream = CreateObject("ADODB.Stream")

    stream.Charset = "utf-8"
    stream.Open
    stream.LoadFromFile Fullpath

    txt=stream.ReadText (-2) 'read only one line
    
End Sub

当涉及到行流时。ReadText excel 冻结。 (文件约400MB)

知道如何只读取大文件的第一行吗?

vba adodb large-files
1个回答
0
投票

只是一个猜测,但这可能是行结束定义的问题。如果 CSV 是在 Unix/Linux 机器上编写的,则它可能只有

<LF>
作为行结束符。如果它来自 Mac,通常只有
<CR>

现在,如果您打开流,它将读取数据,直到找到第一行结尾。在 Windows 上,默认值为

<CR><LF>
- 但是,如果 CSV 文件中的行结尾仅是
<CR>
<LF>
,则流将永远找不到行结尾,因此将读取整个文件。

您可以更改以流的属性

LineSeparator
结尾的预期行。

stream.LineSeparator = adCR

stream.LineSeparator = adLF

stream.LineSeparator = adCRLF

由于您使用的是后期绑定,常量可能未定义,因此请在代码顶部添加声明:

Const adCR = 13
Const adLF = 10
Const adCRLF = -1
© www.soinside.com 2019 - 2024. All rights reserved.