Bonjour à tous,
J'ai quelque soucis pour finaliser mon projet, je cherche à récupérer des données précises dans un fichier .txt (générer par un programme de simulation électromagnétique). Pour se faire je souhaite récupérer le fichier dans un tableau de char, et ensuite je lance des fonctions créer par mes soins pour recherché certain mots clef et écrire les données qui m'interesse dans un autre fichier...
Je parviens à faire toutes ces étapes sauf la premier qui consiste à récupérer l'intégralité du fichier de base dans un tableau (fichier de 500 ko). Il se passe quelque chose de bizarre car je lis bien tout le fichier mais dans mon tableau j'ai la partie final du fichier qui se répète le nombre de fois élevé pour occuper la place allouer...
Bref, le problème est au tout début du programme de la fonction main() car je récupère pas tout dans *txt. Merci de m'aider à parvenir à mes fins.
Je vous mets la partie qui pose problème à mon avis :
Si dans la boucle while je demande d'afficher chaque caractère lu ça m'affiche bien le fichier en entier, mais la fenètre DOS se rafraichit et à la fin il ne reste que la partie final du fichier qui se retrouve dans la fenètre DOS et je crois que c'est cette même partie que se retrouve dans mon txt répété n fois. Je ne comprends rien merci de m'aider à récupérer tous dans mon *txt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 long unsigned int i=0, endTxt=SizeOfFileTexte(); char *a,*txt; txt = new char[endTxt]; FILE *p; p=fopen("youness.txt","r"); while(i<endTxt) { fread(a,sizeof(char),1,p); txt[i]=*a; i+=1; } fclose(p);
Cordialement,
Voilà le programme :
La déclaration des fonction "def.h":
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236 #include "def.h" void main(void) { //A METTRE INTERFACE USER+CREATION DE TXT //Création du tableau (txt) de taille endTxt contenant grating.res long unsigned int i=0, endTxt=SizeOfFileTexte(); char *a,*txt; txt = new char[endTxt]; FILE *p; p=fopen("youness.txt","r"); while(i<endTxt) { fread(a,sizeof(char),1,p); txt[i]=*a; i+=1; } fclose(p); // le constructeur de ifstream permet d'ouvrir un fichier en lecture // le constructeur de ifstream permet d'ouvrir un fichier en lecture /*std::ifstream fichier( "fichier.txt" ); if ( fichier ) // ce test échoue si le fichier n'est pas ouvert { std::stringstream buffer; // variable contenant l'intégralité du fichier // copier l'intégralité du fichier dans le buffer buffer << fichier.rdbuf(); // nous n'avons plus besoin du fichier ! fichier.close(); // manipulations du buffer... std::cout << "Taille du buffer : " << buffer.str().size() << '\n'; }*/ i=0; //Ouverture du fichier de sortie p=fopen("res.txt","w"); //Quelque que charactère en ASCII char tabulation=9,enter=13,space=32,b=98; //Ecriture du fichier de sortie //Recherche de longueur d'onde int k=0; while(i<endTxt) { i=SearchWord(i,txt,endTxt,"wavelength= ",14); i=NextWord(i,txt,endTxt); k=0; while (k<7 ) { *a = txt[i+k]; fwrite(a,sizeof(char),1,p); k++; } //Tabulation pour Exel colone *a = tabulation; fwrite(a,sizeof(char),1,p); //Recherche des données de reflection 0 0 i=SearchWord(i,txt,endTxt,"reflection 0 0",23); i=i+23; //Donnée 1 de reflection i=NextWord(i,txt,endTxt); b=txt[i]; while (b!=space ) { cout << txt[i]; *a = txt[i]; fwrite(a,sizeof(char),1,p); i++; b=txt[i]; } //Tabulation pour Exel colone cout << tabulation; *a = tabulation; fwrite(a,sizeof(char),1,p); //Donnée 2 de reflection i=NextWord(i,txt,endTxt); b=txt[i]; while (b!=space ) { cout << txt[i]; *a = txt[i]; fwrite(a,sizeof(char),1,p); i++; b=txt[i]; } //Tabulation pour Exel colone cout << tabulation; *a = tabulation; fwrite(a,sizeof(char),1,p); //Donnée 3 de reflection i=NextWord(i,txt,endTxt); b=txt[i]; while (b!=space ) { cout << txt[i]; *a = txt[i]; fwrite(a,sizeof(char),1,p); i++; b=txt[i]; } //Tabulation pour Exel colone cout << tabulation; *a = tabulation; fwrite(a,sizeof(char),1,p); //Donnée 4 de reflection i=NextWord(i,txt,endTxt); b=txt[i]; while (b!=space ) { cout << txt[i]; *a = txt[i]; fwrite(a,sizeof(char),1,p); i++; b=txt[i]; } //Tabulation pour Exel colone cout << tabulation; *a = tabulation; fwrite(a,sizeof(char),1,p); //Donnée 5 de reflection PROBLEME ICI i=NextWord(i,txt,endTxt); /*k=0; while(k<12) { *a = txt[i+k]; fwrite(a,sizeof(char),1,p); k++;i++; }*/ b=txt[i]; while (b!=space ) { cout << txt[i]; *a = txt[i]; fwrite(a,sizeof(char),1,p); i++; b=txt[i]; } //recherche de la ligne transmission i=SearchWord(i,txt,endTxt,"transmission",12); i=i+12; //Tabulation pour Exel colone cout << tabulation; *a = tabulation; fwrite(a,sizeof(char),1,p); //Donnée 6 de translation i=NextWord(i,txt,endTxt); b=txt[i]; while (b!=space ) { cout << txt[i]; *a = txt[i]; fwrite(a,sizeof(char),1,p); i++; b=txt[i]; } //Tabulation pour Exel colone cout << tabulation; *a = tabulation; fwrite(a,sizeof(char),1,p); //Donnée 7 de translation i=NextWord(i,txt,endTxt); b=txt[i]; while (b!=space ) { cout << txt[i]; *a = txt[i]; fwrite(a,sizeof(char),1,p); i++; b=txt[i]; } //Tabulation pour Exel colone cout << tabulation; *a = tabulation; fwrite(a,sizeof(char),1,p); //Donnée 8 de translation i=NextWord(i,txt,endTxt); b=txt[i]; while (b!=space ) { cout << txt[i]; *a = txt[i]; fwrite(a,sizeof(char),1,p); i++; b=txt[i]; } //Tabulation pour Exel colone cout << tabulation; *a = tabulation; fwrite(a,sizeof(char),1,p); //Donnée 9 de translation i=NextWord(i,txt,endTxt); b=txt[i]; while (b!=space ) { cout << txt[i]; *a = txt[i]; fwrite(a,sizeof(char),1,p); i++; b=txt[i]; } //Tabulation pour Exel colone cout << tabulation; *a = tabulation; fwrite(a,sizeof(char),1,p); //Donnée 10 de translation Surement Probleme aussi i=NextWord(i,txt,endTxt); b=txt[i]; while (b!=space ) { cout << txt[i]; *a = txt[i]; fwrite(a,sizeof(char),1,p); i++; b=txt[i]; } //Passage a la ligne pour prochaine longueur d'onde cout << enter; *a = enter; fwrite(a,sizeof(char),1,p); }//Fin de l'ecriture du fichier //Fin et destruction char aaa; cin >> aaa; fclose(p); delete txt; exit(1); /* p=fopen("res.txt","w"); fwrite(a,sizeof(char),1,p); fclose(p); */ }
La définition des fonction "def.cpp" :
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 #ifndef def_h #define def_h #include <stdio.h> #include <iostream> #include <stdlib.h> long unsigned int SizeOfFileTexte(void); //return la taille du fichier texte.txt long unsigned int SearchAscii(int,long unsigned int,char*,long unsigned int); //recherche le code ASCII égale à int1 à partir de int2 dans le tableau de caractère char* de taille int3 et retourne la position int0 long unsigned int SearchEnter(long unsigned int,char*,long unsigned int); //idem sauf que le code ASCII int1 n'existe pas c'est forcément 13 (13=enter) long unsigned int NextWord(long unsigned int ,char*,long unsigned int );//retourne le pos du premier caractère du prochain mot long unsigned int NextLine(long unsigned int ,char*,long unsigned int );//retourne le pos du premier carac de la ligne suivante int Compare(long unsigned int,char*,long unsigned int,char*,int);//compare char2 de taille long unsigned int3 a partir de longUncsignedInt1 avec char4 de taille int5 long unsigned int SearchWord(long unsigned int,char*,long unsigned int,char*,int);//retourne la position int3 de la premiere lettre du mot char2 de taille int2 dans le tableau char1 de taille int1 void youness(char*,long unsigned int,char*,int,int,FILE *); #endif
En pièce jointe je vous ai mis le début du fichier à lire "youness.txt" mais tronqué car je peux pas poster plus que 64 ko...
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 #include "def.h" long unsigned int SizeOfFileTexte(void) { FILE *p; p=fopen("youness.txt","r"); char *a; long unsigned int e=0; while(fread(a,sizeof(char),1,p)) { e+=1; } fclose(p); return(e); } long unsigned int SearchAscii(int val,long unsigned int deb,char*a,long unsigned int size) { long unsigned int i=0;//stock la position courante while(i+deb<size && a[i+deb]!=val) { i++; } return(i+deb); } long unsigned int SearchEnter(long unsigned int deb,char*a,long unsigned int size) { long unsigned int i=0;//stock la position courante while(i+deb<size && a[i+deb]!='\n') { i++; } return(i+deb); } long unsigned int NextWord(long unsigned int deb,char*a,long unsigned int size) // va à la premiere lettre du prochain mot { long unsigned int i=0;//stock la position courante while(i+deb<size && a[i+deb]!=' ') { i++; }//on a quitter le mot on est sur le premier espace while(i+deb<size && a[i+deb]==' ') { i++; }//on est sur la premiere data return(i+deb); } long unsigned int NextLine(long unsigned int deb,char*a,long unsigned int size) // va à la premiere lettre du prochain mot { long unsigned int i = SearchEnter(deb,a,size); i++; return(i); } int Compare(long unsigned int i,char *texte,long unsigned int SizeTxt,char *sequence,int SizeSeq) { int j=0,k=0; for(j=0;j<SizeSeq;j++) { if( *(texte+i+j)==*(sequence+j) ){k++;} } if(k==SizeSeq){return(1);} if(k!=SizeSeq || (SizeSeq+i)<SizeTxt){return(0);} } long unsigned int SearchWord(long unsigned int i,char *texte,long unsigned int SizeTxt,char *sequence,int SizeSeq) { int k=0; while(k!=1) { k=Compare(i,texte,SizeTxt,sequence,SizeSeq); i++; } i--; return(i); } void youness(char *txt,long unsigned int endTxt,char *ordre,int sizeOrdre,int N,FILE *res) { /*res=fopen("res.txt","w"); long unsigned int i=0,j=0; int k=0,l=0,c=0; int precision=7; //nombre de caractère de phase affichée A METTRE EN PARAMETRE USER for(l=0;l<N;l++) { for (k=0;k<4;k++) { i=SearchGoodOrderLine(i,txt,endTxt,ordre,sizeOrdre); i=NextWord(i,txt,endTxt); i=NextWord(i,txt,endTxt); i=NextWord(i,txt,endTxt); //cout << i<<"\n"; j=i; while((txt[j]!='\n') && (c<precision) ) { cout << txt[j]; fwrite(txt+j,sizeof(char),1,res); j++;c++; } c=0; cout << " "; fwrite(" ",sizeof(char),1,res); } cout << "\n"; fwrite("\n",sizeof(char),1,res); } fclose(res); */}
Partager