QT:查找和替换文件中的文本

时间:2013-07-29 08:55:37

标签: c++ qt text-files

我需要找到并替换文本文件中的一些文本。我用google搜索并发现最简单的方法是从文件读取所有数据到QStringList,找到并用文本替换精确的行,然后将所有数据写回我的文件。这是最短路吗?请你提供一些例子。 UPD1我的解决方案是:

QString autorun;
QStringList listAuto;
QFile fileAutorun("./autorun.sh");
if(fileAutorun.open(QFile::ReadWrite  |QFile::Text))
{
    while(!fileAutorun.atEnd()) 
    {
        autorun += fileAutorun.readLine();
    }
    listAuto = autorun.split("\n");
    int indexAPP = listAuto.indexOf(QRegExp("*APPLICATION*",Qt::CaseSensitive,QRegExp::Wildcard)); //searching for string with *APPLICATION* wildcard
    listAuto[indexAPP] = *(app); //replacing string on QString* app
    autorun = ""; 
    autorun = listAuto.join("\n"); // from QStringList to QString
    fileAutorun.seek(0);
    QTextStream out(&fileAutorun);
    out << autorun; //writing to the same file
    fileAutorun.close();
}
else
{
    qDebug() << "cannot read the file!";
}

2 个答案:

答案 0 :(得分:3)

如果要求更改,例如将'ou'替换为美国'o',那么

“颜色行为味道邻居”成为“颜色行为味道邻居”,您可以这样做: -

QByteArray fileData;
QFile file(fileName);
file.open(stderr, QIODevice::ReadWrite); // open for read and write
fileData = file.readAll(); // read all the data into the byte array
QString text(fileData); // add to text string for easy string replace

text.replace(QString("ou"), QString("o")); // replace text in string

file.seek(0); // go to the beginning of the file
file.write(text.toUtf8()); // write the new text back to the file

file.close(); // close the file handle.

我没有对此进行编译,因此代码中可能存在错误,但它为您提供了可以执行的操作的概要和概括。

答案 1 :(得分:0)

我正在使用regexp与批处理文件和sed.exe(来自gnuWin32,http://gnuwin32.sourceforge.net/)。它足以替换单个文本。 顺便说一下,那里没有简单的正则表达式语法。让我知道如果你想得到一些脚本的例子。