【问题标题】:Read from text file with delimiter从带有分隔符的文本文件中读取
【发布时间】:2019-05-23 10:44:58
【问题描述】:

我有一个包含学生索引的文本文件,看起来像这样:

Anna Baker
Class 1B
Long description text about the student lorem ipsum dolor sit amet, consetetur sadipscing elitr.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr.
#####
Rick Bell
Class 2A
Long description text about the student lorem ipsum dolor sit amet.
At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. 
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor.
#####
etc.

我有一个学生类,我需要从文本文件中提取信息并将其放入学生对象中。

class Student{
private:
  string name;
  string class;
  string description;
}

到目前为止,姓名和班级工作正常,但我在提取描述文本时遇到了困难。 “#####”用作分隔符。我用:

while (???){
   getline(inFile, word3);
   word3=word3.substr(0,word3.find(delimiter));
}

我需要一个 while 循环来读取直到分隔符的所有行,但我找不到合适的语句。你能帮帮我吗?

【问题讨论】:

  • 如果输入文件的格式很简单:逐行读取,比较每一行是否正确。如果格式更难:必须创建解析器。

标签: c++ text-files delimiter


【解决方案1】:

快速查看cpp reference 建议 std::string::find 的返回值是 std::string::npos 时未找到。所以你可以使用类似

bool continue = true;
while (continue)
{
   getline(inFile, word3);
   continue = word3.find(delimiter)) == std::string::npos;
 //do something else
}

【讨论】:

    【解决方案2】:

    你可以使用 ifstream 来读取文件,有

    std::ifstream student_file("file.txt");
    

    您可以使用,逐行读取文件,

    string info;
    if(student_file.is_open()){
       while( getline(student_file, info) ) {
            if( info == "####")
               continue;
            else {
                    //this is student info
            }
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-07
      • 1970-01-01
      • 2019-04-01
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多