QT 怎么删除文本文件中的某一行数据?(QFile)
示例:
deleteOnelineInFile(1,"./test");//参数,删除第几行(从0开始数),文件名
完整代码示例:
void ResManageObject::deleteOnelineInFile(int iNumLine, const QString sFilename)
{QString sTemp;QFile f(sFilename);if(f.open(QIODevice::ReadWrite)){QTextStream in(&f);sTemp=in.readAll();//注:这里读出来的字符串每行后面都有个隐藏的转行符\n,qDebug打印出来的时候看不出来,只是换行了,后续我们就是根据这个转行符来进行判断删除的}f.close();DeleteOneline(iNumLine,sTemp);QFile writeFile(sFilename);if(writeFile.open(QIODevice::WriteOnly)){QTextStream wrtStream(&writeFile);wrtStream<
void ResManageObject::DeleteOneline(int iNum, QString &str)
{int iAllLine=0;int index=0;//算出行数iAllLinewhile(index!=-1){index=str.indexOf('\n',index+1);iAllLine++;}//如果是直接从位置0开始删除,\n算一个字符,比如要删除的一行有3个字母,加上转行符就是3+1,也就是index+1if(iNum==0){int iPreIndex=str.indexOf('\n');str.remove(0,iPreIndex+1);}else{int iTemp=iNum;int iPreIndex=0,iNextIndex=0;//计算出要删除行的前一个转行符iPreIndex的位置及后一个转行符iNextIndex的位置 while(iTemp--){iPreIndex=str.indexOf('\n',iPreIndex+1);if(iPreIndex!=-1){iNextIndex=str.indexOf('\n',iPreIndex+1);} } //删除的行不是最后一行(从iPreIndex+1这个位置起iNextIndex-iPreIndex个字符全部抹去)if(iNum
补充说明:
一、如果想查明一个字符串是否包含一个特定的字符、子串、或正则表达式,可以使用QString中的indexOf()函数,函数原型如下:
int QString::indexOf (const QString & str, int from = 0,Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
示例:第一个出参数是要查找的内容,第二个参数是查找的起始位置,从0开始数。
QString x = "sticky question";QString y = "sti";x.indexOf(y); // returns 0x.indexOf(y, 1); // returns 10x.indexOf(y, 10); // returns 10x.indexOf(y, 11); // returns -1
二、删除字符串中的内容用remove(i,n),表示从第几个位置(从0开始数)开始,删除n个字符(从1开始数)。
QString s = "Montreal";s.remove(1, 4);// s == "Meal"
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
