当前位置:   article > 正文

QT/C++删除txt文件制定行内容_qt |c++删除文件内容

qt |c++删除文件内容

背景

最近在学习QT,想做个图形化界面的学生管理系统来检验下学习成果,在实现删除功能时遇到了问题。
如:我想删除一个学生,输入学号后,如何删除文件中对应学号学生的信息?
或:我想更改一个学生的信息,输入学号后,如何更改文件中对应学号学生的一些信息


信息在文件中的存储格式如图
在这里插入图片描述

解决方法

可以先将整个文件的内容通过readline()读进一个名为stu_line 的QStringList中,
然后遍历该stu_line,找到目标学生的所有内容,保存在一个字符串 subs中,
这时再次遍历stu_line并进行重写文件,每次判断当前获取到的字符串内容是否等于subs
若等于,continue就行。
这里展示一下代码

void del_stu::del(QString subs)//subs为目标学生内容,即要删除的对象
{
    //覆盖到原文件中
    QFile f("stu.txt");
    if (!f.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        QMessageBox::critical(this,"错误","文件打开失败!信息未保存!");
        return;
    }

    for(int i=0;i<stu_lines.size();i++)
    {
        QString temp=stu_lines[i].trimmed();//trimmed()用去去除前后的空格
                                            //以防万一
                                            //如果不用应该也没关系
        if(temp==subs) continue;//跳过需要删除的学生信息
        QTextStream out(&f);
        out<<stu_lines[i];
        out<<"\n";

    }
    f.close();
   return;

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

可能有人会问我怎么才能得到目标学生的所有内容
这里解释一下:

首先,遍历stu_line,同时将每次从QStringList中获取到的元素保存到字符串 Line中, 再将line通过空格分割(这里使用split()函数)并保存在一个另一个QStringList temp中,然后就可以通过下标得到每个学生的学号与目标学号进行判断(因为我的文件中学号是第二个元素,所以我可以用temp[1]来获取学号),若相同,则返回Line。

这里贴上代码

QString del_stu::find_from_files(QString cnt) //cnt为目标学号
{
    read_from_flie();//将文件读入程序,存放在stu_line中
    int i=0;
    int size=stu_lines.size();
    for(i=0;i<size;i++)
    {
        QString line=stu_lines[i].trimmed();
        if(line=="")continue;//这里包含一个QStringList的out of range问题
                             //怕读取时行与行间有空隙,若为空就下一遍循环。
        QStringList subs=line.split(' ');
        if(subs[1]==cnt)//等于目标学号时,返回该生全部内容
        {
            return line;
        }
    }
    return "没找到";
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

更改学生信息

更改信息的话步骤也一样,可以将本来要跳过的line经过相应处理放回去,再覆盖文件就ok了。


有帮助的点个赞呗

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/652659
推荐阅读
相关标签
  

闽ICP备14008679号