我有一个包含数十亿行的巨大文件。每一行都有以下格式:
A B C D
我只需要B和C的值,这些值不是字符串。
我目前的分裂策略如下:
std::stringstream ss;
std::string line, temp, bValue, cValue;
while (std::getline(infile, line)) {
ss.clear();
ss.str(out_str);
std::getline(ss, temp, '\t'); // Skip value of A
std::getline(ss, bValue, '\t'); // Set value of B
std::getline(ss, cValue, '\t'); // Set value of C
// Use values...
}
由于输入文件包含几十行,即使微小的改进也会影响我程序的一般性能。
提高绩效的想法或图书馆?您是否遇到过同样的瓶颈并修复过它?
感谢。
答案 0 :(得分:0)
如果只有空格是分隔数据的空格,这是一种简单的方法。看起来您在代码中使用制表符进行分隔,所以我也会使用它,但它可以很容易地换成其他东西。
std::string line;
std::string a, b;
while (std::getline(infile, line)) {
std::stringstream ss(line);
ss.ignore(std::numeric_limits<std::streamsize>::max(), '\t');
ss >> a >> b;
}
这样做是在到达第一个'\t'
之前忽略输入,然后将字符串放入a
和b
字符串。另外一个是以下,即
不是很整洁,只是将不必要的值转储到a
中,然后将其覆盖:
std::string line;
std::string a, b;
while (std::getline(infile, line)) {
std::stringstream ss(line);
ss >> a >> a >> b;
}