在某些格式字符串上有效分割

时间:2017-07-30 17:46:20

标签: c++ string performance

我有一个包含数十亿行的巨大文件。每一行都有以下格式:

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...
}

由于输入文件包含几十行,即使微小的改进也会影响我程序的一般性能。

提高绩效的想法或图书馆?您是否遇到过同样的瓶颈并修复过它?

感谢。

1 个答案:

答案 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'之前忽略输入,然后将字符串放入ab字符串。另外一个是以下,即 不是很整洁,只是将不必要的值转储到a中,然后将其覆盖:

std::string line;
std::string a, b;

while (std::getline(infile, line)) {
    std::stringstream ss(line);
    ss >> a >> a >> b;
}