【发布时间】:2019-04-19 12:53:17
【问题描述】:
我有一个csv 文件,该文件用Lf 终止符分隔,我想将其转换为二维数组以进行进一步处理。我成功地将文件读入字符串并将行终止符从Lf 修改为Cr,因为我了解vba 不将Lf 识别为终止符。我想获取这个字符串并创建一个二维数组,我还可以在其中确定行数和列数,因为原始 csv 文件可以是任意大小。 csv 文件也可以很大(>300 MB 和 >1M 元素)
即使每个数据行的字符串中有一个CR 终止符,我也无法弄清楚如何确定列数。下面的代码显示了我如何创建以Cr 作为终止符的逗号分隔字符串
Open fName For Binary As #1
Buf$ = String$(LOF(1), 0)
Get 1, , Buf$
Buf$ = Replace$(Buf$, vbLf, vbCr) ' Replace LF with CR
Close #1
我想要一个方法或函数来创建一个二维数组并计算行数和列数
【问题讨论】:
-
我真的不知道你会得到什么样的执行速度,但是有 String.Split 函数。我认为您可以在 CR 上拆分字符串以生成一个数组,然后遍历该数组并用逗号拆分每个元素,从而构建您的多维数组。
-
如果您的字段值可能包含逗号,那么您将有更多工作要做。您是否尝试过直接在 Excel 中打开文件?这将是最直接的方法。
-
我可以尝试 String.Split 函数并测量我也关心的性能,因此最初并没有走这条路。我试图避免在单元格中读取或写入任何值,因为我知道这非常慢,而且我正在处理接近一百万个元素的大型数组。
-
@XGeek 您是否尝试过使用非标准符号(例如 µ)替换并使用该符号作为分隔符的 texttocolumns?
.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, Other:=True, OtherChar:="µ"使用该符号