微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++:尝试解析 csv 文件,但无法让 stringstream 正常工作

如何解决C++:尝试解析 csv 文件,但无法让 stringstream 正常工作

我有一个包含两行的 csv 文件。第一行是列名。第二行是数据。输入文件如下所示。

This is column 1.,This is column 2.,This is column 3.,John,15,3.2

这是代码

#include <fstream>
#include <iostream>
#include <string>
#include <sstream>

int main()
{
  std::ifstream iFile("input_file.csv");
  if (!iFile.is_open())
    throw std::runtime_error("Could not open file");

  if (iFile.good())
  {
    std::string line;
    std::getline(iFile,line);
    std::stringstream ss(line);

    std::string column_name;
    while (std::getline(ss,column_name,','))
    {
      std::cout << column_name << std::endl;
    }

    std::getline(iFile,line);
    std::cout << "line= " << line << std::endl;

    ss.str(line);
    std::string name;
    std::getline(ss,name,');
    std::cout << "name= " << name << std::endl;
  }

  iFile.close();
}

对于上面的代码,column_name 打印正确。第二行也是正确的。但是,名称打印错误

根据我的测试,ss.str(line); 不起作用。我必须使用另一个字符串流。

    std::stringstream ss1(line);
    std::string name;
    std::getline(ss1,');

然后就可以了,但我想知道为什么,因为在我的其他代码中它运行良好(如下)。

  std::string line = "nick,22,1.57";
  std::stringstream ss(line);
  std::string name;
  std::getline(ss,');
  std::cout << name << std::endl;

  line = "john,23,1.76";
  ss.str(line);
  std::getline(ss,');
  std::cout << name << std::endl;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。