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