1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
// Creation du fichier de données
QFile dataFile("myDataFile.txt");
if(dataFile.open(QFile::WriteOnly | QFile::Text))
{
// Ecriture de l'entete (version initiale avec valeurs bidon "0000000000", "1111111111" et "2222222222")
QTextStream myFileStream(&dataFile);
QStringList entete;
entete.append("#Premiere ligne d'entete");
entete.append("#");
entete.append("#Moy1=0000000000;Moy2=1111111111;Moy3=2222222222");
entete.append("#");
myFileStream << entete.join("\n") << endl;
// Fonction de calcul de donnees, ajoutées au fur et à mesure dans le fichier + calcul des valeurs moy1, moy2 et moy3
float moy1, moy2, moy3;
computeData(myFileStream, moy1, moy2, moy3);
dataFile.close(); // Fermeture du fichier
// Modification de l'entete avec les valeurs moyennes calculees
QFile dataFile2("myDataFile.txt");
if(dataFile2.open(QFile::ReadWrite | QFile::Text)) // Bien ouvrir en mode ReadWrite et non WriteOnly
{
int lineLength = entete[2].count(); // Longueur de la chaine a modifier
// On remplace les "000", "111" et "222" par les valeurs de moy1, moy2 et moy3
QString newLine = entete[2].replace("0000000000", QString::number(moy1, 'f', 3));
newLine = newLine.replace("1111111111", QString::number(moy2, 'f', 3));
newLine = newLine.replace("2222222222", QString::number(moy3, 'f', 3));
// Les valeurs prennent normalement moins de caractères que les valeurs bidon précédentes, on complete la fin de chaine
// avec des espaces pour conserver la meme longueur
while(newLine.count() < lineLength)
newLine += " ";
// Remplacement dans le fichier si les deux chaines (la precedente et la nouvelle) ont bien le meme nombre de caracteres
if(newLine.count() == lineLength)
{
entete[2] = newLine; // La QStringList "entete" contient maintenant la version correcte de l'entete complet
QTextStream myFileStream2(&dataFile2);
myFileStream2.seek(0); // On se place au debut du fichier pour ecraser l'ancien entete
for(int i = 0; i < entete.size(); i++)
myFileStream2 << entete[i] << endl;
}
dataFile2.close();
} |
Partager