我通常使用csv parser中描述的方法来读取电子表格文件。然而,当读取一个包含大约 40 列和 250K 行数据的 64MB 文件时,大约需要 4 分钟。原始方法中,使用一个CSVRow类逐行读取文件,使用私有向量将所有数据存储在一行中。
需要注意的几点:
- 我确实保留了足够的向量容量,但没有多大帮助。
- 我还需要在读取每一行时创建某个类的实例,但即使代码只是读取数据而不创建任何实例,也需要很长时间。
- 该文件是制表符分隔而不是逗号分隔,但我认为这并不重要。
由于该文件中的某些列不是有用的数据,我将方法更改为有一个私有字符串成员来存储所有数据,然后找到第 (n-1) 个和第 n 个分隔符的位置以获取有用的数据(当然有很多有用的专栏)。通过这样做,我避免了一些 push_back 操作,并将时间缩短到 2 分钟多一点。但是,这对我来说似乎仍然太长了。
以下是我的问题:
有没有办法更有效地读取这样的电子表格文件?
我应该按缓冲区而不是逐行读取文件吗?如果是这样,如何按缓冲区读取并使用 csvrow 类?
- 我还没有尝试过 boost tokenizer,那效率更高吗?
谢谢您的帮助!