Probleme de lecture de fichier en c
darksamor
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai un soucis je dois récupérer des données d'un fichier , je récupere bien des données, mais ça ne correspond pas (nombres différents du fichier d'origine)
le fichier contient des lignes de 30 nombres réels (de 6 à 7 chiffres aprés la virgule à plus de 4000)
le but étant ensuite de les rentrer dans un réseau de neurone ensuite (donc des valeurs comprises entre 0 et 1)
j'ai normalisé un fichier avec open office, quand j'ouvre avec gedit j'ai bien les valeurs voulues
maintenant quand j'ouvre ce fichier (ou un autre d'ailleur) avec mon programme j'obtient bien des nombres réels mais rien à voir avec les données du début
ça fait super longtemps que j'ai pas programmé, j'aurais du finir le programme complet il y a deux heures :'(
quelques exemples de lignes non traitées à lire (fichier final de 800 lignes environ:
11.06 14.83 70.31 378.2 0.07741 0.04768 0.02712 0.007246 0.1535 0.06214 0.1855 0.6881 1.263 12.98 0.004259 0.01469 0.0194 0.004168 0.01191 0.003537 12.68 20.35 80.79 496.7 0.112 0.1879 0.2079 0.05556 0.259 0.09158
14.26 19.65 97.83 629.9 0.07837 0.2233 0.3003 0.07798 0.1704 0.07769 0.3628 1.49 3.399 29.25 0.005298 0.07446 0.1435 0.02292 0.02566 0.01298 15.3 23.73 107 709 0.08949 0.4193 0.6783 0.1505 0.2398 0.1082
12.45 15.7 82.57 477.1 0.1278 0.17 0.1578 0.08089 0.2087 0.07613 0.3345 0.8902 2.217 27.19 0.00751 0.03345 0.03672 0.01137 0.02165 0.005082 15.47 23.75 103.4 741.6 0.1791 0.5249 0.5355 0.1741 0.3985 0.1244
17.14 16.4 116 912.7 0.1186 0.2276 0.2229 0.1401 0.304 0.07413 1.046 0.976 7.276 111.4 0.008029 0.03799 0.03732 0.02397 0.02308 0.007444 22.25 21.4 152.4 1461 0.1545 0.3949 0.3853 0.255 0.4066 0.1059
19.73 19.82 130.7 1206 0.1062 0.1849 0.2417 0.0974 0.1733 0.06697 0.7661 0.78 4.115 92.81 0.008482 0.05057 0.068 0.01971 0.01467 0.007259 25.28 25.59 159.8 1933 0.171 0.5955 0.8489 0.2507 0.2749 0.1297
20.47 20.67 134.7 1299 0.09156 0.1313 0.1523 0.1015 0.2166 0.05419 0.8336 1.736 5.168 100.4 0.004938 0.03089 0.04093 0.01699 0.02816 0.002719 23.23 27.15 152 1645 0.1097 0.2534 0.3092 0.1613 0.322 0.06386
alors je n'arrive pas à voir mon code indenté, alors pour ceux qui ont le même probleme:
le même code:
#include <stdio.h>
#include <stdlib.h>
#include "floatfann.h"
// version v1.2.0 de FANN
// compile : gcc use25654.c -o use -lm -lfann
// Documentations : http://leenissen.dk/fann/fann_1_2_0/index.html
int main()
{
fann_type *calc_out; // fann type <=> float
fann_type input[381][30];
struct fann *ann = fann_create_from_file("cancer25654.net");
char ligne[11401];
float val;
FILE * cas_a_traiter;
int tpap =0; // test pas à pas (je sais pas utiliser le débugger de gcc :'(
int i=0,j=0,a;
//printf("tpap=24");
if ((cas_a_traiter=fopen("cas_a_traiter.txt", "r"))==0) printf("erreur d'ouverture");
while(fgets(ligne,12000,cas_a_traiter))
{
//printf("tpap=29 entrée dans la lecture");
for(j=0;j<=29;j++)
{
fgets(ligne,sizeof(ligne),cas_a_traiter);
sscanf(ligne,"%f",&val);
input[i][j]=(fann_type) val;
}
i++;
}
//j'affiche les données recueillies pour controle
for(i=0;i<=5;i++)
{
printf("\nligne n°= %d ", i);
for(j=0;j<=29;j++)
{
printf("%f ", input[i][j]);
}
//printf("tpap=57");
//scanf("%d",&a);
}
//1
fclose(cas_a_traiter);
return 0;
}
j'ai un soucis je dois récupérer des données d'un fichier , je récupere bien des données, mais ça ne correspond pas (nombres différents du fichier d'origine)
le fichier contient des lignes de 30 nombres réels (de 6 à 7 chiffres aprés la virgule à plus de 4000)
le but étant ensuite de les rentrer dans un réseau de neurone ensuite (donc des valeurs comprises entre 0 et 1)
j'ai normalisé un fichier avec open office, quand j'ouvre avec gedit j'ai bien les valeurs voulues
maintenant quand j'ouvre ce fichier (ou un autre d'ailleur) avec mon programme j'obtient bien des nombres réels mais rien à voir avec les données du début
ça fait super longtemps que j'ai pas programmé, j'aurais du finir le programme complet il y a deux heures :'(
#include <stdio.h> #include <stdlib.h> #include "floatfann.h" // version v1.2.0 de FANN // compile : gcc use25654.c -o use -lm -lfann // Documentations : http://leenissen.dk/fann/fann_1_2_0/index.html int main() { fann_type *calc_out; // fann type <=> float fann_type input[381][30]; struct fann *ann = fann_create_from_file("cancer25654.net"); char ligne[11401]; float val; FILE * cas_a_traiter; int tpap =0; // test pas à pas (je sais pas utiliser le débugger de gcc :'( int i=0,j=0,a; //printf("tpap=24"); if ((cas_a_traiter=fopen("cas_a_traiter.txt", "r"))==0) printf("erreur d'ouverture"); while(fgets(ligne,12000,cas_a_traiter)) { //printf("tpap=29 entrée dans la lecture"); for(j=0;j<=29;j++) { fgets(ligne,sizeof(ligne),cas_a_traiter); sscanf(ligne,"%f",&val); input[i][j]=(fann_type) val; } i++; } //j'affiche les données recueillies pour controle for(i=0;i<=5;i++) { printf("\nligne n°= %d ", i); for(j=0;j<=29;j++) { printf("%f ", input[i][j]); } //printf("tpap=57"); //scanf("%d",&a); } //1 fclose(cas_a_traiter); return 0; }
quelques exemples de lignes non traitées à lire (fichier final de 800 lignes environ:
11.06 14.83 70.31 378.2 0.07741 0.04768 0.02712 0.007246 0.1535 0.06214 0.1855 0.6881 1.263 12.98 0.004259 0.01469 0.0194 0.004168 0.01191 0.003537 12.68 20.35 80.79 496.7 0.112 0.1879 0.2079 0.05556 0.259 0.09158
14.26 19.65 97.83 629.9 0.07837 0.2233 0.3003 0.07798 0.1704 0.07769 0.3628 1.49 3.399 29.25 0.005298 0.07446 0.1435 0.02292 0.02566 0.01298 15.3 23.73 107 709 0.08949 0.4193 0.6783 0.1505 0.2398 0.1082
12.45 15.7 82.57 477.1 0.1278 0.17 0.1578 0.08089 0.2087 0.07613 0.3345 0.8902 2.217 27.19 0.00751 0.03345 0.03672 0.01137 0.02165 0.005082 15.47 23.75 103.4 741.6 0.1791 0.5249 0.5355 0.1741 0.3985 0.1244
17.14 16.4 116 912.7 0.1186 0.2276 0.2229 0.1401 0.304 0.07413 1.046 0.976 7.276 111.4 0.008029 0.03799 0.03732 0.02397 0.02308 0.007444 22.25 21.4 152.4 1461 0.1545 0.3949 0.3853 0.255 0.4066 0.1059
19.73 19.82 130.7 1206 0.1062 0.1849 0.2417 0.0974 0.1733 0.06697 0.7661 0.78 4.115 92.81 0.008482 0.05057 0.068 0.01971 0.01467 0.007259 25.28 25.59 159.8 1933 0.171 0.5955 0.8489 0.2507 0.2749 0.1297
20.47 20.67 134.7 1299 0.09156 0.1313 0.1523 0.1015 0.2166 0.05419 0.8336 1.736 5.168 100.4 0.004938 0.03089 0.04093 0.01699 0.02816 0.002719 23.23 27.15 152 1645 0.1097 0.2534 0.3092 0.1613 0.322 0.06386
alors je n'arrive pas à voir mon code indenté, alors pour ceux qui ont le même probleme:
le même code:
#include <stdio.h>
#include <stdlib.h>
#include "floatfann.h"
// version v1.2.0 de FANN
// compile : gcc use25654.c -o use -lm -lfann
// Documentations : http://leenissen.dk/fann/fann_1_2_0/index.html
int main()
{
fann_type *calc_out; // fann type <=> float
fann_type input[381][30];
struct fann *ann = fann_create_from_file("cancer25654.net");
char ligne[11401];
float val;
FILE * cas_a_traiter;
int tpap =0; // test pas à pas (je sais pas utiliser le débugger de gcc :'(
int i=0,j=0,a;
//printf("tpap=24");
if ((cas_a_traiter=fopen("cas_a_traiter.txt", "r"))==0) printf("erreur d'ouverture");
while(fgets(ligne,12000,cas_a_traiter))
{
//printf("tpap=29 entrée dans la lecture");
for(j=0;j<=29;j++)
{
fgets(ligne,sizeof(ligne),cas_a_traiter);
sscanf(ligne,"%f",&val);
input[i][j]=(fann_type) val;
}
i++;
}
//j'affiche les données recueillies pour controle
for(i=0;i<=5;i++)
{
printf("\nligne n°= %d ", i);
for(j=0;j<=29;j++)
{
printf("%f ", input[i][j]);
}
//printf("tpap=57");
//scanf("%d",&a);
}
//1
fclose(cas_a_traiter);
return 0;
}
A voir également:
- Probleme de lecture de fichier en c
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
7 réponses
hello
(de 6 à 7 chiffres aprés la virgule à plus de 4000)
4000 chiffres aprés la virgule ?
(de 6 à 7 chiffres aprés la virgule à plus de 4000)
4000 chiffres aprés la virgule ?
darksamor
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
non il y a des données différentes, toutes des nombres réel positifs des tout petits (6 à 7 chiffres derriere la virgule) et des plus gros 3412.01 par exemple (plus de 3000)
j'ai modifié unn peu le programme:
j'ai supprimé le premier fgets et je force la lecture du fichier avec i
// while(fgets(ligne,12000,cas_a_traiter))
while(i<=380)
{
//printf("tpap=29 entrée dans la lecture");
for(j=0;j<=29;j++)
maintenant le premier caractere de la premiere ligne est bon :D mais c'est le seul :C
heeeeelp
j'ai supprimé le premier fgets et je force la lecture du fichier avec i
// while(fgets(ligne,12000,cas_a_traiter))
while(i<=380)
{
//printf("tpap=29 entrée dans la lecture");
for(j=0;j<=29;j++)
maintenant le premier caractere de la premiere ligne est bon :D mais c'est le seul :C
heeeeelp
je probleme doit se trouver là dedeans mais je vois pas où:
if ((cas_a_traiter=fopen("cas_a_traiter.txt", "r"))==0) printf("erreur d'ouverture");
while(fgets(ligne,12000,cas_a_traiter))
{
//printf("tpap=29 entrée dans la lecture");
for(j=0;j<=29;j++)
{
fgets(ligne,sizeof(ligne),cas_a_traiter);
sscanf(ligne,"%f",&val);
input[i][j]=(fann_type) val;
}
i++;
}
if ((cas_a_traiter=fopen("cas_a_traiter.txt", "r"))==0) printf("erreur d'ouverture");
while(fgets(ligne,12000,cas_a_traiter))
{
//printf("tpap=29 entrée dans la lecture");
for(j=0;j<=29;j++)
{
fgets(ligne,sizeof(ligne),cas_a_traiter);
sscanf(ligne,"%f",&val);
input[i][j]=(fann_type) val;
}
i++;
}
je me trompe ou bien tu lis une ligne ou 12000 char puis 29 lignes ou 11401 char ?
while(fgets(ligne,12000,cas_a_traiter)) { //printf("tpap=29 entrée dans la lecture"); for(j=0;j<=29;j++) { fgets(ligne,sizeof(ligne),cas_a_traiter); sscanf(ligne,"%f",&val); input[i][j]=(fann_type) val; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
euh je suis pas sur de comprendre ta phrase désolé
si j'ai bien compris oui dans le premier code
maintenant je lit une ligne de 30 caractere, je la stocke dans le tableau "ligne" qui fait 12000 carac (pour avoir de la marge, je suis passé par un stade où j'essayais d'ouvrir tout le fichier d'un coup) *
puis je lit la ligne avec sscanf qui se charge de retrouver les float dans le fichier (basiquement il supprime les espaces et stocke le reste)
*je viens d'essayer de mettre un tableau que de 30 caracteres, erreur de segmentation directe, et si j'en met 150000 les chiffres enregistrés déconnent encore plus qu'avant donc j'ai un probleme d'allocation quelquepart mais où b*****d*m***** :'(:'(:'(
si j'ai bien compris oui dans le premier code
maintenant je lit une ligne de 30 caractere, je la stocke dans le tableau "ligne" qui fait 12000 carac (pour avoir de la marge, je suis passé par un stade où j'essayais d'ouvrir tout le fichier d'un coup) *
puis je lit la ligne avec sscanf qui se charge de retrouver les float dans le fichier (basiquement il supprime les espaces et stocke le reste)
*je viens d'essayer de mettre un tableau que de 30 caracteres, erreur de segmentation directe, et si j'en met 150000 les chiffres enregistrés déconnent encore plus qu'avant donc j'ai un probleme d'allocation quelquepart mais où b*****d*m***** :'(:'(:'(
c'est bon j'ai trouvé
while(fgets(ligne,sizeof(ligne),cas_a_traiter))
{
//printf("tpap=29 entrée dans la lecture");
for(j=0;j<=29;j++)
{
// fgets(ligne,sizeof(ligne),cas_a_traiter);
// sscanf(ligne,"%f",&val);
// input[i][j]=(fann_type) val;
sscanf(ligne,"%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f ", &input[i][0], &input[i][1], &input[i][2], &input[i][3], &input[i][4], &input[i][5], &input[i][6], &input[i][7], &input[i][8], &input[i][9], &input[i][10], &input[i][11], &input[i][12], &input[i][13], &input[i][14], &input[i][15], &input[i][16], &input[i][17], &input[i][18], &input[i][19], &input[i][20], &input[i][21], &input[i][22], &input[i][23], &input[i][24], &input[i][25], &input[i][26], &input[i][27], &input[i][28], &input[i][29]);
}
en fait c'était le scanf qui était mal formaté
while(fgets(ligne,sizeof(ligne),cas_a_traiter))
{
//printf("tpap=29 entrée dans la lecture");
for(j=0;j<=29;j++)
{
// fgets(ligne,sizeof(ligne),cas_a_traiter);
// sscanf(ligne,"%f",&val);
// input[i][j]=(fann_type) val;
sscanf(ligne,"%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f ", &input[i][0], &input[i][1], &input[i][2], &input[i][3], &input[i][4], &input[i][5], &input[i][6], &input[i][7], &input[i][8], &input[i][9], &input[i][10], &input[i][11], &input[i][12], &input[i][13], &input[i][14], &input[i][15], &input[i][16], &input[i][17], &input[i][18], &input[i][19], &input[i][20], &input[i][21], &input[i][22], &input[i][23], &input[i][24], &input[i][25], &input[i][26], &input[i][27], &input[i][28], &input[i][29]);
}
en fait c'était le scanf qui était mal formaté