一般在c++编写的程序当中,需要在文本文档当中写入多个数据,并进行查找、修改、删除特定数据时常用数组,也可以选择不使用数组而使用文件流,但由于文件流不提供直接修改与删除的方法,这边给出一个方法供大家参考
1、在文本文档当中添加数据
ofstream ofs; ofs.open("test.txt", ios::out|ios::app);//使用ios::app表示在打开文件后添加数据于文本文档的行尾 int m; string a, b, c, d, e, f; cout << "请输入要添加的学生数量:"; cin >> m; for (int j = 0; j < m; j++) { cout << "请输入要添加的学生学号:"; cin >> a; ofs << a << " "; cout << "请输入要添加的学生姓名:"; cin >> b; ofs << b << " "; cout << "请输入要添加的学生性别:"; cin >> c; ofs << c << " "; cout << "请输入要添加的学生出生日期:"; cin >> d; ofs << d << " "; cout << "请输入要添加的学生专业:"; cin >> e; ofs << e << " "; cout << "请输入要添加的学生年级:"; cin >> f; ofs << f << " "; } ofs.close();
首先打开文件test.txt,随后可以通过定义变量来确定文本文档当中的每行保存的数据数,通过cin给变量赋值,随后ofs将变量值写入建立的文本文档中,最后通过ofs.close关闭文件。
2、在文本文档中查找特定数据
string x; cout << "请输入要查找的学生姓名或学号:"; cin >> x; ifstream ifs;//这一块与上一部分不同的是,这里的定义是读取文本文档当中的数据 string a, b, c, d, e,f; ifs.open("test.txt", ios::in); while (ifs >> a && ifs >> b && ifs >> c && ifs >> d && ifs >> e&&ifs>>f) { if (a == x || b == x) { cout << a << " " << b << " " << c << " " << d << " " << e << " " << f << endl; } } return;
对于特定文件的查找,我们需要用到文件流的读取,同时用到循环,首先输入需要查找的数据后,使用while语句循环读取文本文档中的数据,同时在while语句中嵌套if条件语句判断读到的数据与查找的数据一致时将数据所在行的所有数据输出。
3、在文本文档当中修改特定数据
string x; cout << "请输入要编辑的学生姓名或学号:"; cin >> x; ifstream ifs; ofstream oof; string a, b, c, d, e, f; ifs.open("test.txt", ios::binary | ios::out | ios::in); oof.open("tmp.txt", ios::binary | ios::out);//采用这两个后缀是能够在打开tmp.txt这个文件时直接清空文件中的数据而不需要进行另外 *** 作 while (ifs >> a && ifs >> b && ifs >> c && ifs >> d && ifs >> e && ifs >> f) { if (a == x || b == x) { cout << "请输入新的学号:"; cin >> a; cout << "请输入新的姓名:"; cin >> b; cout << "请输入新的性别:"; cin >> c; cout << "请输入新的出生日期:"; cin >> d; cout << "请输入新的专业:"; cin >> e; cout << "请输入新的年级:"; cin >> f; } oof << a << " " << b << " " << c << " " << d << " " << e << " " << f << endl; } ifs.close(); oof.close(); ofstream ofs; ifstream iof; ofs.open("test.txt", ios::binary | ios::out); iof.open("tmp.txt", ios::binary | ios::out | ios::in); while (iof >> a >> b >> c >> d >> e >> f) { ofs << a << " " << b << " " << c << " " << d << " " << e << " " << f << endl; } ofs.close(); iof.close();
这一块较之上两部分麻烦一点,因为文件流没办法直接截断文件中的数据并进行修改,所以这边采用了建立中间文档的办法,首先是需要查找到特定数据的所在,然后打开原本存有数据的文件test.txt与中间文件tmp.txt,随后通过while语句循环读取test.txt的数据,并逐一写入tmp.txt中,当读到与特定数据一致的数据时,通过重新定义变量的值并将重定义后的数据写入文件tmp.txt中。这样就能够实现对特定数据的修改,但还有一步便是将tmp.txt的数据写入test.txt中,从而实现在原文件中修改特定数据。
4、在文本文档中删除特定数据
string x; cout << "请输入要删除的学生姓名或学号:"; cin >> x; ifstream ifs; ofstream oof; string a, b, c, d, e, f; ifs.open("test.txt", ios::binary | ios::out | ios::in); oof.open("tmp.txt", ios::binary | ios::out); while (ifs >> a && ifs >> b && ifs >> c && ifs >> d && ifs >> e && ifs >> f) { if (a == x || b == x) { continue; } oof << a << " " << b << " " << c << " " << d << " " << e << " " << f<> a >> b >> c >> d >> e >> f) { ofs << a <<" " << b << " " << c << " " << d << " " << e << " " << f << endl; } ofs.close(); iof.close();
这一部分与第三部分的方法大体一致,同样是借助中间文件的存在,在读取test.txt的数据并将数据写入tmp.txt的过程中,读取到与特定数据一致的数据时将跳过本次循环,进而不会将特定数据写入到tmp.txt中,再将tmp.txt的数据写入test.txt中实现特定数据的删除。
以上便是本人使用文件流在文本文档中添加、修改、查找、删除特定数据的方法,如果大家有更好的方法可以一同探讨,有错误的地方欢迎大家指出、提出意见。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)