2013-07-29 127 views
2

我需要查找並替換文本文件中的某些文本。我搜索了一下,發現最簡單的方法是從文件中讀取所有數據到QStringList,找到並用文本替換確切的行,然後將所有數據寫回到我的文件。這是最短的路嗎?你能提供一些例子嗎? UPD1我的解決方案是:QT:查找並替換文件中的文本

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!"; 
} 
+3

你應該嘗試一下,併發布代碼,如果你失敗... –

回答

2

若要求的變化,例如是替代「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. 

我沒有編這一點,所以有可能是代碼中的錯誤,但它給你的你可以做什麼的輪廓和總體思路。

+0

謝謝!但是如果我需要替換我不知道的字符串字符串長度呢? – wlredeye

+0

你能舉個例子說明你的意思嗎? – TheDarkKnight

+0

我爲此發佈了我的解決方案,但問題是如何在閱讀之後但寫入之前清除文件內容?因爲如果我有不同長度的文件,此解決方案不起作用 – wlredeye

0

我已經用批處理文件和sed.exe(來自gnuWin32,http://gnuwin32.sourceforge.net/)使用regexp。它足夠替代單一文本。 順便說一句,那裏沒有簡單的正則表達式語法。讓我知道如果你想得到一些腳本的例子。

+0

我想可能這不是「正確的程序員方式」使用外部應用程序? :)但它是有用的,謝謝! – wlredeye

+0

完全同意你的看法。有時候這樣的方式可能會非常有幫助。我正在使用這種方式來快速自動「修補」vcxproj和vdproj文件。 –

+0

你能提供一些簡單的腳本例子嗎? – wlredeye