C++ 逐行读取文件并标记行

C++ 逐行读取文件并标记行,c++,tokenize,C++,Tokenize,我有一个多行的文件。 行包含由逗号分隔的整数 在下面的代码中,它只解析第一行,而不解析重命名行。有没有关于我做错了的见解 void parseLines(std::ifstream &myfile){ std::string line, token; std::stringstream ss; int i; vector<int> r; while(myfile) { getline(myfile, line); ss.str("");

我有一个多行的文件。 行包含由逗号分隔的整数

在下面的代码中,它只解析第一行,而不解析重命名行。有没有关于我做错了的见解

void parseLines(std::ifstream &myfile){
  std::string line, token;
  std::stringstream ss; 
  int i;
  vector<int> r;
  while(myfile) {
    getline(myfile, line);
    ss.str("");
    ss.str(line);
    if(myfile){
      cout << "SS" << ss.str() << endl;
      while (std::getline(ss, token, ',')){
        std::cout << token << std::endl;  
      }   
    }   
  }
}
void语法行(std::ifstream&myfile){
std::字符串行,令牌;
std::stringstream-ss;
int i;
向量r;
while(myfile){
getline(myfile,line);
ss.str(“”);
ss.str(line);
如果(我的文件){
库特
有没有关于我做错了的见解

在读取第二行数据之前,需要重置
ss
的状态

更好的是,将
ss
的构造移动到循环内部

在这期间,

  • while(myfile)
    替换为
    while(getline(myfile,line))
  • 标记的声明移动到循环内

  • void语法行(std::ifstream&myfile){
    std::字符串行;
    int i;
    向量r;
    while(getline(myfile,line))
    {
    std::stringstream ss(线路);
    字符串标记;
    while(std::getline(ss,token,,')){
    标准::cout
    有没有关于我做错了的见解

    在读取第二行数据之前,需要重置
    ss
    的状态

    更好的是,将
    ss
    的构造移动到循环内部

    在这期间,

  • while(myfile)
    替换为
    while(getline(myfile,line))
  • 标记的声明移动到循环内

  • void语法行(std::ifstream&myfile){
    std::字符串行;
    int i;
    向量r;
    while(getline(myfile,line))
    {
    std::stringstream ss(线路);
    字符串标记;
    while(std::getline(ss,token,,')){
    
    std::cout这里的问题是
    stringstream
    对while循环不是本地的。当您第一次从
    stringstream
    读取流时,会导致设置EOF标志。如果您不清除该标志,那么即使加载更多,您也永远不会从中读取更多信息。获取aro的最简单方法是这是为了使
    stringstream
    成为循环体的局部对象,这样在每次迭代中就可以从一个新的循环体开始,而不必担心清除标志

    while(getline(myfile, line)) // also moved the line reading here to control when to stop the loop
    {
        std::stringstream ss(line);
        while (std::getline(ss, token, ',')){
            std::cout << token << std::endl;  
        }
    }
    
    while(getline(myfile,line))//还将行读取移到此处,以控制何时停止循环
    {
    std::stringstream ss(线路);
    while(std::getline(ss,token,,')){
    
    std::cout这里的问题是
    stringstream
    对while循环不是本地的。当您第一次从
    stringstream
    读取流时,会导致设置EOF标志。如果您不清除该标志,那么即使加载更多,您也永远不会从中读取更多信息。获取aro的最简单方法是这是为了使
    stringstream
    成为循环体的局部对象,这样在每次迭代中就可以从一个新的循环体开始,而不必担心清除标志

    while(getline(myfile, line)) // also moved the line reading here to control when to stop the loop
    {
        std::stringstream ss(line);
        while (std::getline(ss, token, ',')){
            std::cout << token << std::endl;  
        }
    }
    
    while(getline(myfile,line))//还将行读取移到此处,以控制何时停止循环
    {
    std::stringstream ss(线路);
    while(std::getline(ss,token,,')){
    
    STD::你想在代码< >(GETLINE(MyField:Line))< /C> >。在循环中创建StrugFuff.In在Windows上,文件是否用正确的CRLF行结尾格式化?搜索Internet“StAdvOpjultC++读取文件CSV”。另外,在循环中创建STRING FULL。如果这是在Windows上,文件是用正确的CRLF行结尾格式化的吗?在Internet上搜索“StAdvOpjultC++读取文件CSV”。