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 : S�lectionner tout - Visualiser dans une fen�tre � part
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"; }
Partager