0

让我们看一下代码:

#include <iostream>
#include <fstream>
#include <string>
#include <cstdio>
#include <cstdlib>


using namespace std;


int main()
{
    string usrFileStr,
    fileStr = "airNames.txt",  // declaring string literal
    sLine;                        // declaring a string obj

    fstream inFile;                  // declaring a fstream obj
    char ch;

    cout << "Enter a file: ";
    cin >> usrFileStr;


    inFile.open( usrFileStr.c_str(), ios::in ); 
    // at this point the file is open and we may parse the contents of it


    while ( !inFile.eof() )
    {
          getline ( inFile, sLine ); // store contents of txt file into str Obj
          for ( int x = 0; x < sLine.length(); x++ )
          {         
              if ( sLine[ x ] == ',' )break; // when we hit a comma stop reading 
              //cout << sLine[ x ];
          }
          cout << endl;
    }      



        while ( !inFile.eof() )  //read the file again until we reach end of file
        {
                // we will always want to start at this current postion;
              inFile.seekp( 6L, ios::cur );

              getline( inFile, sLine ); // overwrite the contents of sLine
              for ( int y = 0; y < sLine.length(); y++ )
              {
                  if ( sLine[ y ] == ',' )break; // hit a comma then goto seekp until eof
                  cout << sLine[ y ];
              }
              cout << endl;
        }

    inFile.clear();
    inFile.close();



    fgetc( stdin );
    return 0;
}

我的文本文件格式类似于:

string, string andthenspace, numbers, morenumbers

看起来我无法读取该文件两次。EOF每次检查..

第一个while条件有效,它给了我我需要的东西,逗号前的第一个字段,不包括逗号。

所以我第二次想,好的,只是在seekp(X, ios::cur)第二次的每次迭代中从那里开始的函数......

不幸的是,它没有第二次读取文件..

4

3 回答 3

3

第一次读取 EOF 后,您可能需要清除流上的错误位。也就是说,以及进行查找操作。

于 2009-01-20T00:36:48.280 回答
3

首先,永远不要在你的while循环中测试eof,在你到达文件末尾之后,标志将是真的,即太晚了,测试必须在读取之后,在使用你期望读取的内容之前完成。->

while (std::getline(......))

然后,Jonathan Leffler 给了你解决方案,在调用 seekg 之前清除状态位。但是,正如Jamie 指出的那样,您的方法似乎有些复杂。

于 2009-01-20T09:56:50.037 回答
1

你似乎走错了路:

FILE * file;
file = fopen ("file.txt","r");


if (file!=NULL){
        while (!feof(file)) {           
                fscanf(file,"%s ,%s ,%s ,%s",str1,str2,str3,str4);
        }
        fclose (file);
};

您显然可以扩展上面的示例,我没有时间检查它应该可以工作。

于 2009-01-20T00:40:46.527 回答