帮助从文本文件c ++中读取每五行

时间:2010-10-12 03:42:04

标签: c++ file text-files

作为更大的赋值的一部分,我必须在类中创建一个方法,该方法可以读取五行数据,然后将该数据放入动态创建的对象中。我不确定如何将五行数据分别放入对象中。代码应该有助于更好地解释,但它不能按预期工作。如果有人能发现我的错误,请告诉我。如果你能帮助我,我将不胜感激。此外,每读取五行,我创建一个新对象,直到没有任何行。我怎么知道是否有任何线条?再次感谢任何帮助,谢谢你的时间。

    inline void readFromFile(const string& fileName){

        string title;
        string category;
        unsigned int runningTime;
        unsigned int yearOfRelease;
        double price;

        ifstream myReadFile;
        myReadFile.open(fileName);

        while( myReadFile )
        {
            myReadFile>>title;
            myReadFile >> category;
            myReadFile >> runningTime;
            myReadFile >> yearOfRelease;
            myReadFile >> price;

            v.push_back(new DVD(title,category,runningTime,yearOfRelease,price));
        }

        myReadFile.close();

        for(unsigned int i = 0; i < v.size(); i++){

            cout << *v.at(i) << endl;

        }

    }

3 个答案:

答案 0 :(得分:2)

问题是运营商&gt;&gt;用一个字符串只读一个字(不是一行)。

您需要使用std :: getline()函数。

       std::getline( myReadFile, title);
       std::getline( myReadFile, category);
       std::getline( myReadFile, runningTime);
       std::getline( myReadFile, yearOfRelease);
       std::getline( myReadFile, price);

为方便起见,你应该写一个运算符&gt;&gt;对于DVD

std::istream& operator>>(std::istream& str, DVD& data)
{
    // Read data into data here
    return str;
}

现在你的循环变得更容易编写:

std::copy(std::istream_iterator<DVD>(myReadFile),
          std::istream_iterator<DVD>(),
          std::back_inserter(v)
         );

答案 1 :(得分:0)

这就是我现在所拥有的,该文件仍未被读取。我迷失了该怎么做。

inline void readFromFile(const string& fileName){

            string title;
            string category;
            unsigned int runningTime;
            unsigned int yearOfRelease;
            double price;

            ifstream myReadFile;
            myReadFile.open(fileName);

            while( ! myReadFile.eof() )
            {
                getline( myReadFile, title);
                getline( myReadFile, category);
                myReadFile >> runningTime;
                myReadFile >> yearOfRelease;
                myReadFile >> price;

                v.push_back(new DVD(title,category,runningTime,yearOfRelease,price));
            }

            myReadFile.close();

            for(unsigned int i = 0; i < v.size(); i++){

                cout << *v.at(i) << endl;

            }

        }

答案 2 :(得分:0)

我对你使用getline()感到有些困惑。尝试通过调用myReadFile变量上的getline()来获取数据。这使用了一个字符数组。因此,重写代码的一种可能方式可能如下所示:

PS:请注意,在创建字符串时,您的文件名会正确分隔斜杠(\)。

void readFromFile(const string& fileName){
            char title[80];
            char category[80];
            unsigned int runningTime;
            unsigned int yearOfRelease;
            double price;

            ifstream myReadFile;
            myReadFile.open(fileName.c_str());

            while( ! myReadFile.eof() )
            {
                myReadFile.getline( title, 80);
                myReadFile.getline( category, 80);
                myReadFile >> runningTime;
                myReadFile >> yearOfRelease;
                myReadFile >> price;

                v.push_back(new DVD(title,category,runningTime,yearOfRelease,price));
            }

            myReadFile.close();

            for(unsigned int i = 0; i < v.size(); i++){

                cout << *v.at(i) << endl;

            }

        }