j'ai remplacé le fseek(f,-nb_char,SEEK_CUR) par fseek(f,pos,SEEK_SET) ou pos est obtenu par un ftell(f) avant mes fgetch(f) mais ça ne marche toujours pas sous windows.
Version imprimable
j'ai remplacé le fseek(f,-nb_char,SEEK_CUR) par fseek(f,pos,SEEK_SET) ou pos est obtenu par un ftell(f) avant mes fgetch(f) mais ça ne marche toujours pas sous windows.
N'existe pas. C'estCode:if ( f=fopen(fichier,"rt") )
et je conseille plutôtCode:if ( f=fopen(fichier,"r") )
ou mieux :Code:if ( (f=fopen(fichier,"r")) != NULL )
car il est peut utile de compliquer la lecture du code source...Code:
1
2
3
4
5
6 { FILE *f =fopen (fichier,"r"); if (f != NULL) { ...
niveau code, "r" ou "rt" est équivalent, surtout pour gcc. Sinon pour le moment je ne recherche qu'un code qui marche...
Non "rt" n'existe pas en standard et son usage invoque un comportement indéfini, y compris avec gcc. A ma connaissance, seuls les anciens compilateurs Borland C définissent "rt", mais c'est une extension. D'ailleurs, ils acceptent "r" comme le définit la norme, du moins tant qu'on a pas touché à je ne sais plus quelle globale 'Borland C' définissant le mode d'ouverture par défaut des fichiers...
ok...mais le problème ne vient pas de là je pense (je n'ai plus windows pour le moment donc je ne peut plus tester)
ERREUR : La chaîne rempl n'est pas terminée par un '\0'Code:
1
2
3
4
5
6
7
8
9
10
11 char *bouche_tours(char *e, char separateur, char remplacement) { int i, j; char *s,*p, *v, rempl[2], sep[3]; ... rempl[0]=separateur; rempl[1]=remplacement; ... if (*e==separateur) strcat(s,&(rempl[1]));
Code:
1
2
3
4
5
6 char *s,*p, *v, rempl[3], sep[3]; ... rempl[0]=separateur; rempl[1]=remplacement; rempl[2]='\0'; ...
ce n'est pas ça parce que cette erreur est corrigée dans le code actuel :
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
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
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376 #include "../1_inc/csv.h" void erreur_memoire(void) { printf("Erreur Mémoire\n"); exit(1); } void fichier_non_trouve(void) { printf("fichier non trouvé\n"); } void info_fichier(const char *fichier, int *nb_lignes, int *nb_colonnes, int *nb_lignes_vides, char separateur) { char c; int nb_sep, cpt_col; FILE *f; if (nb_lignes) *nb_lignes=0; if(nb_colonnes) *nb_colonnes=0; if(nb_lignes_vides) *nb_lignes_vides=0; f=fopen(fichier,"rt"); if (f) { c=fgetc(f); nb_sep=0; cpt_col=1; ; while( c!=EOF ) { if ( c=='\n' && nb_lignes ) (*nb_lignes)++; if ( c==separateur && nb_colonnes && cpt_col ) (*nb_colonnes)++; if ( cpt_col && c== '\n' && (*nb_colonnes) ) cpt_col=!cpt_col; if( c==separateur ) nb_sep++; c=fgetc(f); } (*nb_colonnes)++; (*nb_lignes_vides)=((*nb_colonnes-1)*(*nb_lignes)-nb_sep)/(*nb_colonnes-1); fclose(f); } else fichier_non_trouve(); } /* f doit bien sûr être ouvert et fermé avant et après la fonction */ void fprintf_tableau(FILE *f,int nb_lignes, int nb_colonnes, double **tableau) { int i,j; fprintf(f,"\n"); for(i=0;i<nb_lignes;i++) { fprintf(f,"ligne %2.2d : ",i+1); for(j=0;j<nb_colonnes;j++) fprintf(f,"%g ",tableau[i][j]); fprintf(f,"\n"); } fprintf(f,"\n"); } char *bouche_trous(char *e, char separateur, char remplacement) { int i; char *s,*p, *v, rempl[3], sep[3]; /* On initialise la chaîne de caractères qui permettra de rechercher la suite de deux separateur */ sep[0]=separateur; sep[1]=separateur; sep[2]='\0'; /* On initialise la chaîne de caractère qui remplacera la suite de deux séparateurs identiques */ rempl[0]=separateur; rempl[1]=remplacement; rempl[2]='\0'; /* On initialise p à e pour le parcours de la chaine d'entrée */ p=e; /* On initialise la chaîne de sortie */ if ( !(s=(char *)malloc((2*strlen(e)+1)*sizeof(char))) ) erreur_memoire(); *s='\0'; /* On teste le premier caractère, et le remplace si besoin est */ if (*e==separateur) strcat(s,&(rempl[1])); /* On recherche sep et les remplace si besoin */ i=0; while(p!=(e+strlen(e))) { v=strstr(p,sep); if (v==p) strcat(s,rempl); else strncat(s,p,1); p++; } /* Test du dernier caractère */ if (*(e+strlen(e)-1)==separateur) strcat(s,&(rempl[1])); /* Réduction de la mémoire à la taille de la chaîne finale */ if (!(s=(char *)realloc(s,sizeof(char)*strlen(s)))) erreur_memoire(); return s; } void enregistre_ligne(double **sortie, char *buffer,int ligne_courante, char separateur) { int nb_sep; char *attribut, sep[2]; nb_sep=0; sep[0]=separateur; sep[1]='\0'; attribut=strtok(buffer, sep); while(attribut!=NULL) { sortie[ligne_courante][nb_sep]=atof(attribut); attribut=strtok(NULL, sep); nb_sep++; } } double **lecture_csv(const char *fichier, int nbl, int nbc, char separateur, int *ligne_tableau) { FILE *f; char *buf1,c; int ligne, i, nb_char, nb_sep; long pos; double **sortie; if ( !(sortie=(double **)malloc(sizeof(double *)*nbl)) ) erreur_memoire(); f=fopen(fichier,"rt"); if (f) { /* On initialise la ligne courante du tableau */ ligne=0; for(i=0;i<=nbl;i++) { pos=ftell(f); /* On calcule le nombre de caractères de la ligne */ c=fgetc(f); nb_char=1; nb_sep=0; while(c!='\n' && c!=EOF) { if (c==separateur) nb_sep++; c=fgetc(f); nb_char++; } /* on écrit la ligne contenue dans le buffer dans le tableau de sortie. Si la ligne est vide on n'imcrémente pas ligne donc on réécrira dessus au prochain tour de boucle */ if ( nb_sep==(nbc-1) ) { fseek(f,pos,SEEK_SET); if ( !(buf1=(char *)malloc(sizeof(char)*(nb_char))) ) erreur_memoire(); fscanf(f,"%s\n",buf1); /* on récupére dans le buffer la ligne courante */ buf1=bouche_trous(buf1,separateur,'0'); if ( !(sortie[ligne]=(double *)malloc(sizeof(double)*nbc)) ) erreur_memoire(); enregistre_ligne(sortie,buf1,ligne,separateur); free(buf1); ligne++; } } fclose(f); } else { fichier_non_trouve(); if (ligne_tableau) *ligne_tableau=0; return NULL; } if ( !(sortie=(double **)realloc(sortie,sizeof(double *)*ligne)) ) erreur_memoire(); if (ligne_tableau) *ligne_tableau=ligne; return sortie; } void libere_tableau(int nb_lignes, double **tableau) { int i; if (tableau) { for(i=0;i<nb_lignes;i++) { if (tableau[i]) free(tableau[i]); } free(tableau); } } /* renvoi une ligne pour min et une pour max contenant les min et max de la colonne correspondante. Pour le moement, le tableau ne doit comporter que des chiffres. Il faut penser à faire un free sur min et max après utilisation. */ void extremum(double **tableau, int nb_lignes, int nb_colonnes, double **mini, double **maxi) { int i,j; double *min, *max; if (!(min=(double *)malloc(sizeof(double)*nb_colonnes))) erreur_memoire(); if (!(max=(double *)malloc(sizeof(double)*nb_colonnes))) erreur_memoire(); for(i=0;i<nb_colonnes;i++) { min[i]=tableau[0][i]; max[i]=tableau[0][i]; } for(i=0;i<nb_lignes;i++) { for(j=0;j<nb_colonnes;j++) { if (tableau[i][j]<min[j]) min[j]=tableau[i][j]; if (tableau[i][j]>max[j]) max[j]=tableau[i][j]; } } *mini=min; *maxi=max; } void libere_tout(double **tableau, double *min, double *max, double *somme, int nbl) { if (min) free(min); if (max) free(max); if (somme) free(somme); if (tableau) libere_tableau(nbl,tableau); } void normalisation(double **tableau,double *min, double *max, int nbc, int nbl) { int i,j; double EM; for(i=0;i<nbc;i++) { EM=max[i]-min[i]; for(j=0;j<nbl;j++) { if (EM) tableau[j][i]=(tableau[j][i]-min[i])/EM; } } } /* penser au free(*somme) */ void somme_lignes(double **tableau, double **somme, int nb_lignes, int nb_colonnes) { double *sum; int i,j; if (!(sum=(double *)malloc(sizeof(double)*nb_lignes))) erreur_memoire(); for(i=0;i<nb_lignes;i++) { sum[i]=0.0; for(j=0;j<nb_colonnes;j++) { sum[i]+=tableau[i][j]; } } *somme=sum; } void la_totale_test(const char *fichier, double ***tab, int *nb_lignes) { double **tableau=NULL,*min, *max, *somme; char sep=','; int nbl=0,nbc,nblv,i; FILE *f; f=fopen("test.can","w"); if (f) { fprintf(f,"Informations sur le fichier :\n"); fprintf(f,"-----------------------------\n"); info_fichier(fichier,&nbl,&nbc,&nblv,sep); fprintf(f,"\nNombre de lignes : %d\nNombre de colonnes :%d\nNombre de lignes vides :%d\n\n",nbl,nbc,nblv); } tableau=lecture_csv(fichier,nbl,nbc,sep,&nbl); if (tableau && f) { fprintf(f,"Autre : valeur numérique\n"); fprintf(f,"N.B. : cette version de la librairie ne prend pas en compte les chaines de caractères\n"); fprintf(f,"\n"); fprintf_tableau(f,nbl,nbc,tableau); extremum(tableau,nbl,nbc,&min,&max); fprintf(f,"mins : "); for(i=0;i<nbc;i++) fprintf(f,"%g ",min[i]); fprintf(f,"\n"); fprintf(f,"maxs : "); for(i=0;i<nbc;i++) fprintf(f,"%g ",max[i]); fprintf(f,"\n\n"); normalisation(tableau,min,max,nbc,nbl); fprintf(f,"Tableau Normalisé :\n"); fprintf(f,"-------------------\n"); fprintf_tableau(f,nbl,nbc,tableau); somme_lignes(tableau,&somme,nbl,nbc); fprintf(f,"Somme des lignes :\n"); fprintf(f,"------------------\n"); for(i=0;i<nbl;i++) fprintf(f,"somme[%d]=%g\n",i,somme[i]); fprintf(f,"\n"); } fclose(f); libere_tout(NULL,min,max,somme,nbl); *tab=tableau; *nb_lignes=nbl; }
:koi::koi:
que veulent faire ces lignes de code :
Code:
1
2
3
4
5
6
7
8
9 c=fgetc(f); nb_sep=0; cpt_col=1; ; while( c!=EOF )
- un ";" se promenant tout seul
- une boucle sur c qui est lu a l'exterieur de la boucle....
oui c'est vrai, désolé mais j'ai du réinstaller Linux et j'ai galéré quelques jours avec gentoo avant de revenir à ubuntu faute de temps .
Pour la dernière version :
http://www.rniamo-developping.prog.fr/C_CSV.tar.gz
pour le ; c'est corrigé.
c est initialisé avant le while mais il y a encore des fgetc à l'intérieur.
personne ne peut tester chez lui svp ? moi ça marche mais pour windows je ne sais pas....
Heureusement que j'ai 7-Zip pour le tar...
Ca compile sous windows sans problèmes.
L'exécution semble correcte (une petite fenêtre GTK+...).
Je prends quoi comme fichier de test ? fichier.csv, fichier1.csv ? ?
J'ai chargé 'fichier.csv', j'ai fait [Play/Pause], il ne se passe rien... Idem avec fichier1.csv. Mais ce sont des fichiers texte au format Unix, non ? Il faut peut être les passer par unix2dos avant usage, non ?
En fait, non, le format semble être compatible avec DOS/Windows :
Fichier.csv :
[Quitter] fonctionne...Code:
1
2
3
4
5
6 00000000h: 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 31 2C 33 2C 36 0D ; ..........1,3,6. 00000010h: 0A 32 2C 36 2C 31 32 0D 0A 33 2C 39 2C 31 38 0D ; .2,6,12..3,9,18. 00000020h: 0A 34 2C 31 32 2C 32 34 0D 0A 35 2C 31 35 2C 33 ; .4,12,24..5,15,3 00000030h: 30 0D 0A 36 2C 31 38 2C 33 36 0D 0A 37 2C 32 31 ; 0..6,18,36..7,21 00000040h: 2C 34 32 0D 0A 38 2C 32 34 2C 34 38 0D 0A 39 2C ; ,42..8,24,48..9,
Eviter les accents, ce n'est pas portable :
Je ne sais pas ce que ça fait à ma machine...Code:
1
2
3
4
5
6
7
8
9
10
11 void erreur_memoire(void) { printf("Erreur Mémoire\n"); exit(1); } void fichier_non_trouve(void) { printf("fichier non trouvé\n"); }
En ce qui concerne les accents...oui c'est vrai, je ferais attention.
Pour le bouton play/pause, pour le moment il créé un fichier "test.can" dans le répertoire de l'éxécutable qui contient des informations sur le fichier .csv (oui les fichiers de test sont ceux du dossier "fichier_test") qui sont en fait des fichiers textes (donc portable).
Quand je lançais sous windows, le fichier csv était mal analysé alors que sous linux j'ai les bonnes infos...
J'obtiens ceci :
C'est mal ?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 Informations sur le fichier : ----------------------------- Nombre de lignes : 20 Nombre de colonnes :13 Nombre de lignes vides :0 Autre : valeur numérique N.B. : cette version de la librairie ne prend pas en compte les chaines de caractères ligne 01 : 1 3 5 7 9 11 13 15 17 19 21 23 25 ligne 02 : 0 4 6 8 10 12 14 16 18 20 22 24 26 ligne 03 : 0 5 7 9 11 13 15 17 19 21 23 25 27 ligne 04 : 0 6 8 10 12 14 16 18 20 22 24 26 28 ligne 05 : 0 7 9 11 13 15 17 19 21 23 25 27 29 ligne 06 : 0 8 10 12 14 16 18 20 22 24 26 28 30 ligne 07 : 0 9 11 13 15 17 19 21 23 25 27 29 31 ligne 08 : 0 10 12 14 16 18 20 22 24 26 28 30 32 ligne 09 : 26 28 30 32 0 1,72923e-322 0 7,36158e-322 0 7,41098e-322 0 1,27619e-303 1,061e-314 ligne 10 : 26 28 30 32 1,42405e-304 0 1,31257e-304 1,276e-303 1,42437e-304 0 7,98683e-315 1,27619e-303 1,061e-314 ligne 11 : 26 28 30 32 6,42965e-312 0 6,42965e-312 3,60739e-313 3,60739e-313 6,06891e-312 3,60739e-313 5,64451e-312 -1,#QNAN ligne 12 : 26 28 30 32 4,94066e-324 0 4,94066e-324 2,122e-314 0 2,122e-314 0 2,122e-314 -1,#QNAN ligne 13 : 26 28 30 32 2,122e-314 0 2,122e-314 4,94066e-324 0 2,122e-314 0 2,122e-314 -1,#QNAN ligne 14 : 26 28 30 32 0 2,122e-314 0 0 1,3411e-311 -1,#QNAN 0 0 0 ligne 15 : 26 28 30 32 1,413e-303 4,29665e+170 1,14449e+243 6,73299e+252 0 1,09402e-303 5,93605e-315 2,39869e-320 7,06686e-304 ligne 16 : 26 28 30 32 0 8,55344e-315 4,24402e-312 1,10344e-312 0 0 1,47803e-304 1,276e-303 1,54287e-304 ligne 17 : 26 28 30 32 4,94066e-324 1,09618e-304 1,09618e-304 1,27627e-303 1,061e-314 0 7,98368e-315 1,27627e-303 1,061e-314 ligne 18 : 26 28 30 32 1,42148e-304 0 1,09602e-304 1,27623e-303 1,061e-314 0 7,98653e-315 1,27606e-303 1,52906e-304 ligne 19 : 26 28 30 32 1,32779e+252 8,69169e-311 0 1,61971e-312 1,01185e-320 1,32778e+252 8,69169e-311 0 1,81333e-312 ligne 20 : 26 28 30 32 2,122e-314 1,30375e-310 0 1,61273e-312 1,01185e-320 1,02531e-304 8,69169e-311 0 1,61273e-312 ligne 21 : 6,96346e-317 6,9634e-317 2,122e-314 7,05139e-317 1,31074e-304 6,96342e-317 2,122e-314 7,05134e-317 0 6,96343e-317 2,122e-314 7,05136e-317 6,96343e-317 mins : 0 6,9634e-317 2,122e-314 7,05139e-317 0 0 0 0 0 0 0 0 0 maxs : 26 28 30 32 1,32779e+252 4,29665e+170 1,14449e+243 6,73299e+252 24 1,32778e+252 28 30 32 Tableau Normalisé : ------------------- ligne 01 : 0,0384615 0,107143 0,166667 0,21875 6,77819e-252 2,56013e-170 1,13588e-242 2,22784e-252 0,708333 1,43096e-251 0,75 0,766667 0,78125 ligne 02 : 0 0,142857 0,2 0,25 7,53133e-252 2,79287e-170 1,22325e-242 2,37636e-252 0,75 1,50628e-251 0,785714 0,8 0,8125 ligne 03 : 0 0,178571 0,233333 0,28125 8,28446e-252 3,02561e-170 1,31063e-242 2,52488e-252 0,791667 1,58159e-251 0,821429 0,833333 0,84375 ligne 04 : 0 0,214286 0,266667 0,3125 9,03759e-252 3,25835e-170 1,39801e-242 2,6734e-252 0,833333 1,6569e-251 0,857143 0,866667 0,875 ligne 05 : 0 0,25 0,3 0,34375 9,79072e-252 3,49109e-170 1,48538e-242 2,82193e-252 0,875 1,73222e-251 0,892857 0,9 0,90625 ligne 06 : 0 0,285714 0,333333 0,375 1,05439e-251 3,72383e-170 1,57276e-242 2,97045e-252 0,916667 1,80753e-251 0,928571 0,933333 0,9375 ligne 07 : 0 0,321429 0,366667 0,40625 1,1297e-251 3,95657e-170 1,66013e-242 3,11897e-252 0,958333 1,88284e-251 0,964286 0,966667 0,96875 ligne 08 : 0 0,357143 0,4 0,4375 1,20501e-251 4,18931e-170 1,74751e-242 3,26749e-252 1 1,95816e-251 1 1 1 ligne 09 : 1 1 1 1 0 0 0 0 0 0 0 4,25396e-305 3,31562e-316 ligne 10 : 1 1 1 1 0 0 0 0 5,93486e-306 0 2,85244e-316 4,25397e-305 3,31562e-316 ligne 11 : 1 1 1 1 0 0 0 0 1,50308e-314 0 1,28835e-314 1,8815e-313 -1,#QNAN ligne 12 : 1 1 1 1 0 0 0 0 0 0 0 7,07332e-316 -1,#QNAN ligne 13 : 1 1 1 1 0 0 0 0 0 0 0 7,07332e-316 -1,#QNAN ligne 14 : 1 1 1 1 0 0 0 0 5,58792e-313 -1,#QNAN 0 0 0 ligne 15 : 1 1 1 1 0 1 1 1 0 0 2,12002e-316 8,00386e-322 2,20839e-305 ligne 16 : 1 1 1 1 0 0 0 0 0 0 5,27866e-306 4,25332e-305 4,82146e-306 ligne 17 : 1 1 1 1 0 0 0 0 4,42082e-316 0 2,85131e-316 4,25424e-305 3,31562e-316 ligne 18 : 1 1 1 1 0 0 0 0 4,42082e-316 0 2,85233e-316 4,25352e-305 4,77832e-306 ligne 19 : 1 1 1 1 1 0 0 0 4,19956e-322 1 3,10418e-312 0 5,66667e-314 ligne 20 : 1 1 1 1 0 0 0 0 4,19956e-322 0 3,10418e-312 0 5,03978e-314 ligne 21 : 2,67826e-318 0 0 0 0 0 0 0 0 0 7,57856e-316 2,35045e-318 2,17607e-318 Somme des lignes : ------------------ somme[0]=3,53727 somme[1]=3,74107 somme[2]=3,98333 somme[3]=4,2256 somme[4]=4,46786 somme[5]=4,71012 somme[6]=4,95238 somme[7]=5,19464 somme[8]=4 somme[9]=4 somme[10]=-1,#QNAN somme[11]=-1,#QNAN somme[12]=-1,#QNAN somme[13]=-1,#QNAN somme[14]=7 somme[15]=4 somme[16]=4 somme[17]=4 somme[18]=6 somme[19]=4 somme[20]=7,6506e-316
pour le fichier2.csv suivant (je le reposte parce que je ne suis pas sûr de la version de l'archive par rapport de la mienne) :
j'obtiensCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 1,3,5,7,9,11,13,15,17,19,21,23,25 2,4,6,8,10,12,14,16,18,20,22,24,26 3,5,7,9,11,13,15,17,19,21,23,25,27 4,6,8,10,12,14,16,18,20,22,24,26,28 5,7,9,11,13,15,17,19,21,23,25,27,29 6,8,10,12,14,16,18,20,22,24,26,28,30 7,9,11,13,15,17,19,21,23,25,27,29,31 8,10,12,14,16,18,20,22,24,26,28,30,32 9,11,13,15,17,19,21,23,25,27,29,31,33 ,11,13,15,17,19,21,23,25,27,29,31,33 11,13,15,17,19,21,23,25,27,29,31,33,35 12,14,16,18,20,22,24,26,28,30,32,34,36 13,15,17,19,21,23,25,27,29,31,33,35,37 14,16,18,20,22,24,26,28,30,32,34,36,38 15,17,19,21,23,25,27,29,31,33,35,37,39 16,18,20,22,24,26,28,30,32,34,36,38,40 17,19,21,23,25,27,29,31,33,35,37,39,41 18,20,22,24,26,28,30,32,34,36,38,40,42 19,21,23,25,27,29,31,33,35,37,39,41,43 20,22,24,26,28,30,32,34,36,38,40,42,44
il y a donc bien un petit bug...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 Informations sur le fichier : ----------------------------- Nombre de lignes : 21 Nombre de colonnes :13 Nombre de lignes vides :1 Autre : valeur numérique N.B. : cette version de la librairie ne prend pas en compte les chaines de caractères ligne 01 : 1 3 5 7 9 11 13 15 17 19 21 23 25 ligne 02 : 2 4 6 8 10 12 14 16 18 20 22 24 26 ligne 03 : 3 5 7 9 11 13 15 17 19 21 23 25 27 ligne 04 : 4 6 8 10 12 14 16 18 20 22 24 26 28 ligne 05 : 5 7 9 11 13 15 17 19 21 23 25 27 29 ligne 06 : 6 8 10 12 14 16 18 20 22 24 26 28 30 ligne 07 : 7 9 11 13 15 17 19 21 23 25 27 29 31 ligne 08 : 8 10 12 14 16 18 20 22 24 26 28 30 32 ligne 09 : 9 11 13 15 17 19 21 23 25 27 29 31 33 ligne 10 : 11 13 15 17 19 21 23 25 27 29 31 33 35 ligne 11 : 12 14 16 18 20 22 24 26 28 30 32 34 36 ligne 12 : 13 15 17 19 21 23 25 27 29 31 33 35 37 ligne 13 : 14 16 18 20 22 24 26 28 30 32 34 36 38 ligne 14 : 15 17 19 21 23 25 27 29 31 33 35 37 39 ligne 15 : 16 18 20 22 24 26 28 30 32 34 36 38 40 ligne 16 : 17 19 21 23 25 27 29 31 33 35 37 39 41 ligne 17 : 18 20 22 24 26 28 30 32 34 36 38 40 42 ligne 18 : 19 21 23 25 27 29 31 33 35 37 39 41 43 ligne 19 : 20 22 24 26 28 30 32 34 36 38 40 42 44 mins : 1 3 5 7 9 11 13 15 17 19 21 23 25 maxs : 20 22 24 26 28 30 32 34 36 38 40 42 44 Tableau Normalisé : ------------------- ligne 01 : 0 0 0 0 0 0 0 0 0 0 0 0 0 ligne 02 : 0,0526316 0,0526316 0,0526316 0,0526316 0,0526316 0,0526316 0,0526316 0,0526316 0,0526316 0,0526316 0,0526316 0,0526316 0,0526316 ligne 03 : 0,105263 0,105263 0,105263 0,105263 0,105263 0,105263 0,105263 0,105263 0,105263 0,105263 0,105263 0,105263 0,105263 ligne 04 : 0,157895 0,157895 0,157895 0,157895 0,157895 0,157895 0,157895 0,157895 0,157895 0,157895 0,157895 0,157895 0,157895 ligne 05 : 0,210526 0,210526 0,210526 0,210526 0,210526 0,210526 0,210526 0,210526 0,210526 0,210526 0,210526 0,210526 0,210526 ligne 06 : 0,263158 0,263158 0,263158 0,263158 0,263158 0,263158 0,263158 0,263158 0,263158 0,263158 0,263158 0,263158 0,263158 ligne 07 : 0,315789 0,315789 0,315789 0,315789 0,315789 0,315789 0,315789 0,315789 0,315789 0,315789 0,315789 0,315789 0,315789 ligne 08 : 0,368421 0,368421 0,368421 0,368421 0,368421 0,368421 0,368421 0,368421 0,368421 0,368421 0,368421 0,368421 0,368421 ligne 09 : 0,421053 0,421053 0,421053 0,421053 0,421053 0,421053 0,421053 0,421053 0,421053 0,421053 0,421053 0,421053 0,421053 ligne 10 : 0,526316 0,526316 0,526316 0,526316 0,526316 0,526316 0,526316 0,526316 0,526316 0,526316 0,526316 0,526316 0,526316 ligne 11 : 0,578947 0,578947 0,578947 0,578947 0,578947 0,578947 0,578947 0,578947 0,578947 0,578947 0,578947 0,578947 0,578947 ligne 12 : 0,631579 0,631579 0,631579 0,631579 0,631579 0,631579 0,631579 0,631579 0,631579 0,631579 0,631579 0,631579 0,631579 ligne 13 : 0,684211 0,684211 0,684211 0,684211 0,684211 0,684211 0,684211 0,684211 0,684211 0,684211 0,684211 0,684211 0,684211 ligne 14 : 0,736842 0,736842 0,736842 0,736842 0,736842 0,736842 0,736842 0,736842 0,736842 0,736842 0,736842 0,736842 0,736842 ligne 15 : 0,789474 0,789474 0,789474 0,789474 0,789474 0,789474 0,789474 0,789474 0,789474 0,789474 0,789474 0,789474 0,789474 ligne 16 : 0,842105 0,842105 0,842105 0,842105 0,842105 0,842105 0,842105 0,842105 0,842105 0,842105 0,842105 0,842105 0,842105 ligne 17 : 0,894737 0,894737 0,894737 0,894737 0,894737 0,894737 0,894737 0,894737 0,894737 0,894737 0,894737 0,894737 0,894737 ligne 18 : 0,947368 0,947368 0,947368 0,947368 0,947368 0,947368 0,947368 0,947368 0,947368 0,947368 0,947368 0,947368 0,947368 ligne 19 : 1 1 1 1 1 1 1 1 1 1 1 1 1 Somme des lignes : ------------------ somme[0]=0 somme[1]=0,684211 somme[2]=1,36842 somme[3]=2,05263 somme[4]=2,73684 somme[5]=3,42105 somme[6]=4,10526 somme[7]=4,78947 somme[8]=5,47368 somme[9]=6,84211 somme[10]=7,52632 somme[11]=8,21053 somme[12]=8,89474 somme[13]=9,57895 somme[14]=10,2632 somme[15]=10,9474 somme[16]=11,6316 somme[17]=12,3158 somme[18]=13
une petite mise à jour, je ne sais pas si le problème vient de là mais dans main.c après l'initialisation de gtk+ ( gtk_init() ), il faut ajouter :
et ne pas oublier leCode:setlocale(LC_NUMERIC,"C");
au début.Code:#include <locale.h>
ça permet de convertir correctement les chaîne de caractère en double si les nombres sont non entiers.
voici une version des sources pour windows ... mais je n'ai pas tester si ça marche (le Gtk sous wine...c'est énorme ;) : les fenêtre sont tellement grosse que je ne peux savoir ou cliquer) :
http://www.rniamo-developping.prog.fr/wxDev-cpp.zip
NB : il faut que les runtimes de gtk soient dans windows/system32/
plus personne ? :(
Pour le problème qui apprait dans votre test Emmanuel Delahaye, j'ai eu le même en faisant unaprés leCode:fgetc(f);
(ce qui est normal puisque du coup je ne prend plus en compte le premier chiffre) mais fscanf sous linux et windows serait différent ?Code:fscanf(f,"%s\n",buf);
personne ne voit ?