QT 查找文件中字符串并替换的问题

QT控制台程序,如果需要匹配的字符串在首行的话,无法完成替换。麻烦各位帮忙看看。打印出来的debug显示已经完成替换了,但是首行无法写入。其他行就完全没问题。。。。。。QT环境是QT5.11.0.。。。。谢谢

#include <QtCore/QCoreApplication>
#include <QFile>
#include <QTextStream>
#include <QTextCodec>
QString str,str2;
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QTextStream cin(stdin, QIODevice::ReadOnly);
    QTextStream cout(stdout, QIODevice::WriteOnly);

    QString strAll;
    QStringList strList;
    QFile readFile("F:/test.txt");
     if(readFile.open((QIODevice::ReadOnly|QIODevice::Text)))
    {
        QTextStream stream(&readFile);
        strAll=stream.readAll();
    }readFile.close();

    QFile writeFile("F:/test.txt");
    if(writeFile.open(QIODevice::WriteOnly|QIODevice::Text))
    {
       QTextStream stream(&writeFile);
       strList=strAll.split("\n");

       cout<<"input string"<<endl;
       cin>>str;

       cout<<"input string to replace"<<endl;
       cin>>str2;

       for(int i=0;i<strList.count();i++)
       {
                if(i==strList.count()-1)
                {
                    //最后一行不需要换行
                    stream<<strList.at(i);
                }
                else
                {
                    stream<<strList.at(i)<<'\n';
                }
               //cout<<strList.at(i)<<endl;

        strList.replaceInStrings(str,str2);
#if 0
           if(strList.at(i).contains(str))
           {

               //QString tempStr=strList.at(i);
               strList.replaceInStrings(str,str2);
               cout<<strList.at(i)<<endl;

               stream<<'\n';

               i++;
           }
#endif
       }
    }
       writeFile.close();
}

1个回答

strList.replaceInStrings(str,str2); 放到for循环外面就可以了。

m0_37154850
小皮球飞呀飞 回复weixin_44505659: 不好意思,现在才看到,应该是你写的问题,条件编译"if 0"去掉应该是可以的,还有就是你要是用contains的话,建议使用正则表达式,这样的话可以比较好,Qregularexpression ~
一年多之前 回复
weixin_44505659
weixin_44505659 回复小皮球飞呀飞: 不是同时包含G02和CR也替换了,这是为什么?求教,拜托了
一年多之前 回复
weixin_44505659
weixin_44505659 回复小皮球飞呀飞: strList.replaceInStrings("G02","G12"); #if 0 if(strList.at(i).contains("CR")&& strList.at(i).contains("G02")) { //QString tempStr=strList.at(i); strList.replaceInStrings("G02","G12"); cout<<strList.at(i)<<endl; stream<<'\n'; i++; } #endif
一年多之前 回复
m0_37154850
小皮球飞呀飞 回复weixin_44505659: debug调试看一下结果~应该是IO读写文件的问题,之前有碰到过
一年多之前 回复
weixin_44505659
weixin_44505659 回复小皮球飞呀飞: 我运行后为什么是空白的文档?
一年多之前 回复
m0_37154850
小皮球飞呀飞 谢谢老哥了,刚刚接触QT对一些东西的使用还是很差劲,非常感谢!!!
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问