获取csv文件中行数的最快方法是什么?

时间:2018-04-29 10:06:54

标签: c++ csv file-handling

获取CSV文件中行数的最佳方法是什么?我有一个大的CSV文件(1 GB)并使用getline永久地遍历整个文件。 这是我尝试过的:

string s; 
int RowCount=0;

ifstream in("sample.csv");

while(!in.eof()) {
    getline(in, s);
    RowCount ++;
}

cout << "Rows: "<<RowCount;

in.close(); 

有没有办法确定文本文件中的行数而不打开它?

1 个答案:

答案 0 :(得分:3)

如果不打开文件,则无法确定文件中的行数。除非每行具有固定长度,否则您可以简单地将文件大小除以行的长度。否则你实际上必须通读整个文件来计算行数。

这应该尽可能快:

std::ifstream in("sample.csv");

std::size_t RowCount = 0;

char buff[4096]; // larger = faster (within limits)

while(in.read(buff, sizeof(buff)) || in.gcount())
    RowCount += std::count(buff, buff + in.gcount(), '\n');

std::cout << "Rows: " << RowCount;

它将文件以块的形式读入缓冲区并计算行结束标记'\n'的数量。缓冲区越大,它应该越有效。