QT: recherche et remplacement de texte dans un fichier
J'ai besoin de trouver et remplacer du texte dans le fichier texte. J'ai googlé et trouvé que la façon la plus simple est de lire toutes les données à partir du fichier de QStringList, trouver et remplacer la ligne exacte avec du texte et écrire toutes les données de mon fichier. C'est le chemin le plus court? Pouvez-vous donner un exemple, s'il vous plaît.
UPD1 ma solution est la suivante:
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!";
}
vous devriez essayer quelque chose, et poste le code si vous ne ...
OriginalL'auteur wlredeye | 2013-07-29
Vous devez vous connecter pour publier un commentaire.
Si le changement nécessaire, par exemple, est de remplacer le " ou "à l'américaine" o " tels que
"couleur de comportement saveur prochain" devient "la couleur de comportement saveur voisin", vous pourriez faire quelque chose comme ceci: -
Je n'ai pas compilé cela, il peut donc y avoir des erreurs dans le code, mais il vous donne le plan et l'idée générale de ce que vous pouvez faire.
Pouvez-vous me donner un exemple de ce que tu veux dire?
J'ai posté mon siolution pour cela, mais le problème est comment faire pour effacer le contenu de fichier après la lecture, mais avant d'écrire? parce que cette solution ne fonctionne pas si j'ai des fichiers avec différentes longueur
Vous pouvez écrire dans un nouveau fichier, supprimez l'ancienne et ensuite renommer le nouveau fichier au nom d'origine, ou tout simplement fermer le fichier et l'ouvrir de nouveau avec QIODevice::Truncate pour la mode.
OriginalL'auteur TheDarkKnight
J'ai utilisé regexp par lots de fichiers et d'sed.exe (à partir de gnuWin32, http://gnuwin32.sourceforge.net/). Son assez bon pour remplacer un texte unique.
btw, il n'est pas une simple syntaxe regexp. laissez-moi savoir Si vous voulez obtenir un exemple de script.
tout à fait d'accord avec vous. parfois, une telle façon peut être très utile. Je suis à l'aide de cette façon rapide et automatique "correctifs" vcxproj et vdproj fichiers.
pouvez-vous donner un exemple simple de script?
[code] echo off set sed=.._aux\shellUtils\gnu\sed.exe ensemble rxProductName="s#(ProductName.*=.*8:).*#\1%cmnProductName% %versionNumber%\x22#g" appel :replaceLib %rxProductName% %pathVdProj% %vdProj% sortie /b :replaceLib rem %1 - regexp, %2 - dossier %3 - sourceFile %sed% -je.bak -e %1 %2\%3 exit /b] [code]
OriginalL'auteur std.approach