当前位置:   article > 正文

QT 怎么删除文本文件中的某一行数据?(QFile)_qt删除文件中的指定一行

qt删除文件中的指定一行

示例:

deleteOnelineInFile(1"./test");//参数,删除第几行(从0开始数),文件名

完整代码示例: 

  1. void ResManageObject::deleteOnelineInFile(int iNumLine, const QString sFilename)
  2. {
  3. QString sTemp;
  4. QFile f(sFilename);
  5. if(f.open(QIODevice::ReadWrite))
  6. {
  7. QTextStream in(&f);
  8. sTemp=in.readAll();//注:这里读出来的字符串每行后面都有个隐藏的转行符\n,qDebug打印出来的时候看不出来,只是换行了,后续我们就是根据这个转行符来进行判断删除的
  9. }
  10. f.close();
  11. DeleteOneline(iNumLine,sTemp);
  12. QFile writeFile(sFilename);
  13. if(writeFile.open(QIODevice::WriteOnly))
  14. {
  15. QTextStream wrtStream(&writeFile);
  16. wrtStream<<sTemp;
  17. }
  18. writeFile.close();
  19. }
  1. void ResManageObject::DeleteOneline(int iNum, QString &str)
  2. {
  3. int iAllLine=0;
  4. int index=0;
  5. //算出行数iAllLine
  6. while(index!=-1)
  7. {
  8. index=str.indexOf('\n',index+1);
  9. iAllLine++;
  10. }
  11. //如果是直接从位置0开始删除,\n算一个字符,比如要删除的一行有3个字母,加上转行符就是3+1,也就是index+1
  12. if(iNum==0)
  13. {
  14. int iPreIndex=str.indexOf('\n');
  15. str.remove(0,iPreIndex+1);
  16. }
  17. else
  18. {
  19. int iTemp=iNum;
  20. int iPreIndex=0,iNextIndex=0;
  21. //计算出要删除行的前一个转行符iPreIndex的位置及后一个转行符iNextIndex的位置
  22. while(iTemp--)
  23. {
  24. iPreIndex=str.indexOf('\n',iPreIndex+1);
  25. if(iPreIndex!=-1)
  26. {
  27. iNextIndex=str.indexOf('\n',iPreIndex+1);
  28. }
  29. }
  30. //删除的行不是最后一行(从iPreIndex+1这个位置起iNextIndex-iPreIndex个字符全部抹去)
  31. if(iNum<iAllLine-1)
  32. {
  33. str.remove(iPreIndex+1, iNextIndex-iPreIndex);//不用减一
  34. }
  35. //删除的是最后一行(从iPreIndex起始len-iPreIndex个字符全抹去)
  36. else if(iNum==iAllLine-1)
  37. {
  38. int len=str.length();
  39. str.remove(iPreIndex+1,len-iPreIndex);
  40. /*注:这里一定要加1,不然你试试从1一直删除,
  41. 然后再多删几次之后,换成删除第0行,
  42. 你会发现删不掉了文件中的第一行数据了*/
  43. }
  44. }
  45. }

补充说明:

一、如果想查明一个字符串是否包含一个特定的字符、子串、或正则表达式,可以使用QString中的indexOf()函数,函数原型如下:

  1. int QString::indexOf (
  2. const QString & str,
  3. int from = 0,
  4. Qt::CaseSensitivity cs = Qt::CaseSensitive ) const

 示例:第一个出参数是要查找的内容,第二个参数是查找的起始位置,从0开始数。

  1. QString x = "sticky question";
  2. QString y = "sti";
  3. x.indexOf(y); // returns 0
  4. x.indexOf(y, 1); // returns 10
  5. x.indexOf(y, 10); // returns 10
  6. x.indexOf(y, 11); // returns -1

二、删除字符串中的内容用remove(i,n),表示从第几个位置(从0开始数)开始,删除n个字符(从1开始数)。

  1. QString s = "Montreal";
  2. s.remove(1, 4);
  3. // s == "Meal"

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

闽ICP备14008679号