[英]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.