如何删除字符串上方的行

时间:2016-04-04 22:58:09

标签: c++ string ifstream getline ofstream

我怎样才能删除字符串上方的一行?例如,我打开一个文本文件并进行编辑。我的程序的工作方式是用户输入教师姓名。 “John Doe先生”然后从搜索到的名称中删除接下来的7行。在“Courses”和“endInstructor”之间查找所有内容并删除它,但剩下的就是搜索到的名称上面的两个字符串,即“loginpw123”和“startInstructor”。

现在我的问题是,在删除其他所有内容之后,我将如何删除这两行,因为每个教授都有不同之处,而且列表上有大约20个配置文件。

以下是代码:

int main()
{
    ifstream myfile("instructor.csv");
    ofstream myfile2("outfile.csv");
    string line;
    string dropInstructor;
    bool notFound = false;

    cout << "Enter Instructor to drop by name: ";
    getline(cin, dropInstructor);

    while (getline(myfile, line))
    {
        if (line != dropInstructor)
        {
            myfile2 << line << endl;
        }

        if (line == dropInstructor)
        {
            myfile2 << "";
            for (int i = 0; i < 7; i++)
            {
                getline(myfile, line);
                myfile2 << "";
            }
            getline(myfile, line);
            if (line == "Courses:")
            {
                myfile2 << "";
                while (getline(myfile, line))
                {
                    if (line == "endInstructor")
                    {
                        myfile2 << "";
                        break;
                    }
                    myfile2 << "tempp";
                }

                /*for (int i = 0; i < 4; i++)
                {
                    getline(myfile, line);
                    myfile2 << "";
                }*/
            }
        }
    }

    /*if (!notFound)
    {
        cout << "Not found" << endl;
        cin.get();
        // client ->sendToClient("Not Found");
    }*/

    myfile.close();
    myfile2.close();

    remove("instructor.csv");
    rename("outfile.csv", "instructor.csv");

}

文本文件:

loginpw123
startInstructor
Mr. John Doe
755 Teacher St
532 791 3761
johndoe@schoolname.ca
392817
03/02/1988
Male
777777
Courses:
Courseinfo1
Courseinfo2
Courseinfo3
Courseinfo4
Courseinfo5
endInstructor

1 个答案:

答案 0 :(得分:1)

在确定他们是否属于正在删除的教授之前,您是将前两行复制到新文件中(为什么startProfessor之上的行不在startProfessor / {之间? {1}}而是?)。您需要暂时将第一行保存在内存中,然后检查教授,如果不匹配,则将与教授相关的所有行写入新文件。

尝试这样的事情:

endProfessor