繁体   English   中英

从ifstream计算一行中的数据点数

[英]Counting the number of data points in a line from ifstream

我有一堆数据文件需要读入某个多维容器,所有这些容器都具有以下格式:

a1,a2,a3,...,aN,
b1,b2,b3,...,bN,
c1,c2,c3,...,cN,
................
z1,z2,z3,...,zN,

从上一个问题中我知道可以通过以下方法来快速计算文件中的总行数:

std::ifstream is("filename");
int lines = std::count(std::istreambuf_iterator<char>(is), std::istreambuf_iterator<char>(), '\n');

这让我知道要读取的数据集总数为z,每个z包含N个数据点。 下一个挑战是计算每行的数据值数量,对此我可以执行以下操作:

std::ifstream is("filename");
std::string line;
std::getline(is, line);
std::istringstream line_(line);
int points = std::count(std::istreambuf_iterator<char>(line_), std::istreambuf_iterator<char>(), ',');

我可以确信每个文件每行具有相同数量的数据值。 我的问题是,是否有一种更好/更快的方法来实现上述目标,而又不必使用getline并将单个行转储到字符串中? 我想知道是否可以使用流缓冲区来实现,但是经过一些搜索后,对我来说还不是很清楚。

任何帮助将不胜感激,谢谢!

如果需要使用

int points = std::count(std::istreambuf_iterator<char>(line_), std::istreambuf_iterator<char>(), ',');

对于每行文本,我建议您寻找一种提高效率的方法。

但是,您说:

我可以确信每个文件每行具有相同数量的数据值。

这意味着,您可以从第一行计算出点数,并假定它对其余行有效。

我不会一次打电话就流汗。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM