如何在c ++中从txt文件中检索数据

时间:2012-05-09 23:32:40

标签: c++ visual-c++

即时通讯的问题是我能够创建一个文本文件,一次写入文本。我希望能够在必要时添加更多行,而无需创建新文件。我的下一个问题是,我似乎无法得到我正在寻找的输出。例如。文本文件包含

  

启动1
  FNAME | L-NAME | SSN
  END1

我的目标是只获取start1和end1中的数据,并在没有分隔符的情况下返回fname lname和ssn。这是我的代码

int main()
{
    fstream filestr;
    string line;

    filestr.open ("file.txt", fstream::in | fstream::out | fstream::app);
    if(!filestr.is_open())
    {
        cout << "Input file connection failed.\n";
        exit(1); 
    }
    else{
        filestr<<"Start2\n";
        filestr<< "middle|middle"<<endl;
        filestr<<"end2"<<endl;
        if(filestr.good()){
            while(getline(filestr, line) && line !="end1"){
                if(line !="Start1"){
                    //below this point the output goes screwy
                    while(getline(filestr, line,'|')){
                        cout<<"\n"<<line;
                    }
                }
            }
        }
        filestr.close();
    }

2 个答案:

答案 0 :(得分:2)

近:

当您打开文件以追加读取位置时。 所以在你开始阅读之前,你需要回到开头(或关闭并重新开放)。

        filestr.seekg(0);

第二个探测器是你嵌套而while循环没有检查结束:

                while(getline(filestr, line,'|')){
                    cout<<"\n"<<line;

这打破了界限。但它并没有停在最后。它一直持续到文件末尾。

您应该做的是获取当前行并将其视为自己的流:

            if(line !="Start1")
            {   
                std::stringstream   linestream(line);
              // ^^^^^^^^^^^^^^^^^^  Add this line

                while(getline(linestream, line,'|'))
                {         //  ^^^^^^^^^^ use it as the stream
                    cout<<"\n"<<line;
                }   
            }

PS:在file.txt

start1
^^^^^ Note not Start1

答案 1 :(得分:1)

while(getline(filestr, line))
{
      if(line !="Start1" && line != "end1")
      {
          // Get the tokens from the string.           
      }
}