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