从CSV文件中读取一列数据
C++ Reading a column of data from a CSV file
编辑:在示例代码中,我最初声明我要打印到控制台。这只是示例代码,用于参考我如何执行文件I/o。我实际上是将数据存储在一个稍后会用到的向量中。
所以我使用c++的标准文件I/o来读取这个包含大约700万条记录的CSV文件。现在在8gb的电脑上需要大约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++程序,它应该会加快这一过程。
getline
已经将在文件流上调用基于块的缓冲读取,并且您的操作系统将通过预缓存进一步优化该访问模式。(见鬼,你的硬盘可能会变得很聪明。)您的程序花费这么长时间并不奇怪,但这是因为控制台输出比文件输入慢得多(主要是因为需要在之后进行大量字体渲染)。在尝试优化IO之前,先实现想要对文件执行的实际处理[并取出控制台输出],然后看看它有多快。
在控制台打印700万行非常耗时。我不知道你为什么要那样做。
您可以用cout
注释掉这行,看看控制台打印的速度有多快。
读取大量顺序数据并不是使用缓冲I/O的最佳选择,因为数据被复制了两次(或更多次):
磁盘->缓冲区->程序
您可以通过打开/读取/关闭C函数(#include <io.h>
)使用非缓冲I/O。这就不太适合文本处理了。
另一种选择是通过setvbuf
增加C运行时库使用的缓冲区大小。你可以尝试不同的大小,看看是否有帮助。
相关文章:
- 查找矩阵C++中每一列和每一行的最小和最大元素
- 如何在C++中获取二维数组中最少的一列数?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 当 c++ 需要一种数据类型并获取另一种数据类型时会发生什么?
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 如何允许用户选择何时停止三列中的每一列的旋转
- 从我的2d数组中的一列返回的字符串值被压缩为一个字符串(在Mac os上打开Windows txt文件)
- 在犰狳立方体中添加一列 1 的有效方法
- 我想使用 C++ 从 excel 获取记录,并希望使用特定的列数据(例如书籍 ID)控制输出
- 在二维向量的每一列中查找最大值
- 只有一列适合其内容大小,而另一列则拉伸
- 使用标准库或Boost库从一组数据中计算直方图
- cpp 中是否存在一种数据结构,可以轻松地提供一种基于已存在的实例构建新结构的方法
- 如何将单独的数组分组在一起(类似于按一列对表进行排序)
- C++ 最后一列中的直方图错误
- 添加两个矩阵会打印一列垃圾数据 c++
- 读取数据文件并将每一列分配给各个数组
- 数据排序依据是哪一列,QTableWidget
- 如何从文本文件中保存一列数据到c++中的数组
- 从CSV文件中读取一列数据