C++从CSV文件读取数据列

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

Edit:在示例代码中,我最初说我正在打印到控制台。那只是示例代码,可以参考我如何完成文件I/O。实际上,我将数据存储在以后要使用的向量中。

因此,我正在使用标准文件I/O用于C ++在包含约700万条记录的CSV文件中阅读。现在,在8GB PC上大约需要80秒钟,但是我想加快这段时间。

string line; ifstream myfile ("example.csv"); if (myfile.is_open()) { while ( getline (myfile,line) ) { //cout << line << '\n'; -- edit. Not printing out to console but storing to an array } myfile.close(); }
由于CSV文件只有一个列,是否有一种方法可以立即快速获取所有数据,而不是通过行进行行? 

我理解是,从文件到程序的传输是最长的,所以我在想是否可以从文件中存储所有数据(不确定此过程),然后立即将其全部写入C ++程序,应该加快该过程。

c++ csv
2个回答
3
投票

getline

已经将在文件流上调用基于块的缓冲读数,而您的操作系统将通过预播种进一步优化该访问模式。 (地狱,您的
驱动器可能会对此变得聪明。)您的程序花费了这么长时间也就不足为奇了,但这是因为控制台输出要比文件输入慢得多(主要是因为之后需要进行一堆字体渲染)。在尝试优化IO之前,请实现要在文件上执行的实际处理[并取出控制台输出],然后看看它的速度。

打印700万行TOT他的控制台非常耗时。不知道为什么要这样做。

0
投票
cout

来评论这条线,看看控制台打印的速度有多快。

阅读大量的顺序数据并不是缓冲I/O的最佳选择,因为数据复制了两次(或更多):

磁盘 - >缓冲区 - >程序。

您可以通过开放/读/关闭C函数(
#include <io.h>

)使用未掩盖的I/O。这不太适合文本处理。

其他替代方案是增加C运行时库使用的缓冲尺寸。您可以玩不同尺寸以查看是否有帮助。

您可以使用我的lib

https://github.com/hima12-awny/read-csv-dataframe-cpp

读取pandas python语法的csv文件。


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.