从文件C ++中替换整行

时间:2014-02-13 02:52:26

标签: c++ file replace

所以我一直在玩代码而且我一直在寻找如何替换找到的行。我能够找到名称并将“new_gpa”添加到该部分,但它会在同一文件中输出最终结果,但不会替换原始分数和名称。

我怎样才能删除与gpa一起找到的原始行?并将新值存储到文件中。

cristian 2.1
rachel 3.0

名称搜索:cristian

新文件:

cristian 2.1
rachel 3.0
cristian 4.1

代码如下。

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <fstream>
#include <sstream>
#include <cstring>
using namespace std;


int main()
{
    string name;
    int offset;
    string line;

    ifstream read_file;
    read_file.open("alpha.dat", std::ios_base::app);
    cout << "Please enter your name: \n";
    cin>> name;

    if (read_file.is_open())
    {
        while(!read_file.eof())
        {
            getline(read_file,line);

            if((offset = line.find(name)) != string::npos)
            {
                cout <<"the word has been found: \n";
                //cout << line  //example to display
                //new code
                istringstream iss ( line );
                string thisname;
                double gpa;
                double new_gpa = 2.1;

                if( iss >> thisname >> gpa)
                {
                    if (thisname == name)
                    {
                        cout << name <<endl;
                        cout << gpa <<endl;
                        ofstream myfile;
                        myfile.open("alpha.dat",std::ios_base::app);
                        myfile << " \n" << name << " " << gpa+ new_gpa;
                        myfile.close();
                        read_file.close();
                    }
                }
            }
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

使用std::ios_base::app打开文件,这意味着所有输出操作都在文件末尾执行,并将内容附加到当前文件。但您要做的是修改原始位置的数据。因此,您应该使用std::ios_base::in打开文件,功能seekp可以在下一步帮助您。