Stringstream定界器

时间:2018-04-07 15:35:12

标签: c++ string parsing stream

我正在解析一个CSV文件,其结构已知string,int,int,double

我正在编写一个逐行解析CSV文件的函数。我试图设计它,使它看起来像这样:

void foo(const string& csvline){
  std::stringstream csvStream(csvline);
  std::string s; int i1; int i2; double d;
  csvline >> s;
  csvline >> i1;
  csvline >> i2;
  csvline >> d;
}

有没有办法为CSV文件执行此操作?

我知道如果他们被空格隔开,这将是开箱即用的。但是对于CSV文件(或者任意分隔符)呢?

1 个答案:

答案 0 :(得分:0)

您无法使用operator>>指定分隔符。使用std::getline()将分隔值读入临时std::string,然后使用std::istringstream来解析字符串。

void foo(const std::string& csvline)
{
    std::istringstream csvStream(csvline);
    std::string s, tmp;
    int i1, i2;
    double d;

    std::getline(csvStream, s, ',');

    std::getline(csvStream, tmp, ',');
    std::istringstream(tmp) >> i1;

    std::getline(csvStream, tmp, ',');
    std::istringstream(tmp) >> i2;

    std::getline(csvStream, tmp);
    std::istringstream(tmp) >> d;
}