获取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();
有没有办法确定文本文件中的行数而不打开它?
答案 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'
的数量。缓冲区越大,它应该越有效。