Probleme d'écriture dans un fichier deja existant
Bonjour,
voila mon probleme, je possede un fichier texte dans lequel sont rangées des données. Avec le programme ci-dessous j'enregistre les données qui m'interesse. Cette partie fonctionne trés bien mais quand je veux modifié le fichier texte, je me place sur l'octet ou je veux changer ma donnée et je la remplace. Le programme compile et s'execute sans probleme mais dans le fichier texte, au lieu de changer juste le mote que je veux je me retrouve avec plein de symbole, ma donnée et rien.
Si quelqu'un a une explication et une solution je lui en serai reconnaissant.
Merci.
Code:
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
const int nbdonnees = 66; //constante du nombre de donnees à recuperer
string tabdonnees[nbdonnees]; //tableau servant à ranger mes donnees
string tabvaleur[nbdonnees]; //tableau dans lequel seront rangées les valeurs des données
void RangerDonnees(); //procedure qui rempli le tableau
void EnregistrerDonnees();
string chaine1;
int main()
{
int i =1; //indice de parcours du tableau où sont rangé les données du fichier matlab
string mot;
string chaine;
RangerDonnees();
ifstream fichier("donnees.m", ios::in); // on ouvre en lecture;
if(fichier) // si l'ouverture a fonctionné
{
fichier >> mot; // on lit le premier mot du fichier
while(i != nbdonnees) //tant que l'on a pas recuperer toutes les valeurs
{
while(mot != tabdonnees[i] ) // tant que le mot est different du mot du tableau
{
fichier >> mot; // on lit le mot suivant
}
fichier.seekg(2, ios::cur); //on se place sur la valeur à recuperer
fichier >> chaine; //on lit la valeur
tabvaleur[i] = chaine; // on range la valeur dans le tableau
i++; //on passe à la donnee suivante
}
fichier.close();
}
else
{
cerr << "Impossible d'ouvrir le fichier1 !" << endl;
}
ofstream fic("test.txt", ios::out | ios::trunc); // on ouvre en ecriture
if(fic) // si l'ouverture a fonctionné
{
i=1;
while(i != nbdonnees)
{
fic << tabdonnees[i]<< " = "; //on ecrit dans test.txt
fic << tabvaleur[i] << endl;
i++;
}
fic.close();
}
else
{
cerr << "Impossible d'ouvrir le fichier2 !" << endl;
}
EnregistrerDonnees();
}
void EnregistrerDonnees()
{
int i =1; //indice de parcours du tableau où sont rangé les données du fichier matlab
string mot;
int position;
cout << "entrez le nouvelle valeur" << endl;
cin >> chaine1 ;
ifstream fichier("donnees1.m", ios::in); // on ouvre en lecture
if(fichier) // si l'ouverture a fonctionné
{
fichier >> mot; // on lit le premier mot du fichier
while(mot != tabdonnees[1] ) // tant que le mot est different du mot du tableau
{
fichier >> mot; // on lit le mot suivant
}
fichier.seekg(2, ios::cur); //on se place sur la valeur à recuperer
position = fichier.tellg();
//i++; //on passe à la donnee suivante
fichier.close();
ofstream fichier("donnees1.m", ios::out); // on ouvre en ecriture;
if(fichier) // si l'ouverture a fonctionné
{
fichier.seekp(position, ios::beg);
fichier << chaine1; //on écrit la valeur
tabvaleur[i] = chaine1; // on range la valeur dans le tableau
}
fichier.close();
}
else
{
cerr << "Impossible d'ouvrir le fichier1 !" << endl;
}
ofstream fic("test.txt",ios::out | ios::trunc); // on ouvre en ecriture
if(fic) // si l'ouverture a fonctionné
{
i=1;
while(i != nbdonnees)
{
fic << tabdonnees[i]<< " = "; //on ecrit dans test.txt
fic << tabvaleur[i] << endl;
i++;
}
fic.close();
}
else
{
cerr << "Impossible d'ouvrir le fichier2 !" << endl;
}
}
void RangerDonnees()
{
tabdonnees[1] = "type_assemblage";
tabdonnees[2] = "type_bague";
tabdonnees[3] = "Nombre_de_pistes";
tabdonnees[4] = "type_element_roulant";
tabdonnees[5] = "E_bague";
} |