Problème de lecture d'un fichier en C
slipy15
-
sdfsam Messages postés 60 Date d'inscription Statut Membre Dernière intervention -
sdfsam Messages postés 60 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
J'ai un problème avec un fichier
J'enregistre dans ce fichier des structures
typedef struct
{
int OffSet;
short Longueur;
char Donnee[255];
} ELEMENT;
Ensuite je dois afficher le contenu du fichier en lisant 2 enregistrements à la fois. Mais lorsque j'essaye d'afficher, soit j'ai la même ligne qui s'affiche en boucle, soit j'ai un message d'erreur: "Segmentation Fault (core dumped)"
D'après ce que j'ai compris, ce serait un problème de pointeur mais je n'arrive pas à le résoudre.
Je tiens à préciser que je suis sur une machine virtuelle solaris, ce qui normalement ne change rien.
Voici ma fonction d'affichage:
int Liste(FICHIER F)
{
printf("Liste du fichier : %s\n------------------\n",F.NomFichier);
int fin = 0; // Variable qui me permet de voir si je suis en fin de fichier
int ret = 1; // Variable qui récupère la valeur de retour de fread
FILE* fp; // mon pointeur de fichier
ELEMENT Elm; // ma structure
rewind(fp); // je replace le pointeur au début du fichier
do
{
fin = feof (fp); // je vérifie que je ne suis pas à la fin de mon fichier
if(fin != 0)
{
return 1; // Si je suis à la fin, je quitte la fonction d'affichage
}
ret = fread(&Elm,sizeof(Elm),2,fp); // Je lis 2 enregistrements de mon fichier
printf("%d\t",Elm.OffSet);
printf("%hd\t",Elm.Longueur);
puts(Elm.Donnee);
printf("\n"); // J'affiche
printf("%d\t",Elm.OffSet);
printf("%hd\t",Elm.Longueur);
puts(Elm.Donnee);
printf("\n");
fin = feof (fp); // Je revérifie si je suis à la fin du fichier
}while(fin == 0); // Si je ne suis pas à la fin, je boucle pour afficher les enregistrements suivant
return 0;
}
Merci pour vos réponses.
J'ai un problème avec un fichier
J'enregistre dans ce fichier des structures
typedef struct
{
int OffSet;
short Longueur;
char Donnee[255];
} ELEMENT;
Ensuite je dois afficher le contenu du fichier en lisant 2 enregistrements à la fois. Mais lorsque j'essaye d'afficher, soit j'ai la même ligne qui s'affiche en boucle, soit j'ai un message d'erreur: "Segmentation Fault (core dumped)"
D'après ce que j'ai compris, ce serait un problème de pointeur mais je n'arrive pas à le résoudre.
Je tiens à préciser que je suis sur une machine virtuelle solaris, ce qui normalement ne change rien.
Voici ma fonction d'affichage:
int Liste(FICHIER F)
{
printf("Liste du fichier : %s\n------------------\n",F.NomFichier);
int fin = 0; // Variable qui me permet de voir si je suis en fin de fichier
int ret = 1; // Variable qui récupère la valeur de retour de fread
FILE* fp; // mon pointeur de fichier
ELEMENT Elm; // ma structure
rewind(fp); // je replace le pointeur au début du fichier
do
{
fin = feof (fp); // je vérifie que je ne suis pas à la fin de mon fichier
if(fin != 0)
{
return 1; // Si je suis à la fin, je quitte la fonction d'affichage
}
ret = fread(&Elm,sizeof(Elm),2,fp); // Je lis 2 enregistrements de mon fichier
printf("%d\t",Elm.OffSet);
printf("%hd\t",Elm.Longueur);
puts(Elm.Donnee);
printf("\n"); // J'affiche
printf("%d\t",Elm.OffSet);
printf("%hd\t",Elm.Longueur);
puts(Elm.Donnee);
printf("\n");
fin = feof (fp); // Je revérifie si je suis à la fin du fichier
}while(fin == 0); // Si je ne suis pas à la fin, je boucle pour afficher les enregistrements suivant
return 0;
}
Merci pour vos réponses.
A voir également:
- Problème de lecture d'un fichier en C
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
2 réponses
bonjour,
je pense qu'il manque le fopen, mais c'est surement une erreur de retranscription.
par contre vous essayez de lire 2 éléments en ayant seulement alloué de la place pour un seul
ELEMENT Elm; // ma structure 1 seul element ELEMENT
.....
ret = fread(&Elm,sizeof(Elm),2,fp); // Je lis 2 enregistrements de mon fichier
et là lecture de 2 ELEMENT dans Elm
d'où le probléme
cdlt
je pense qu'il manque le fopen, mais c'est surement une erreur de retranscription.
par contre vous essayez de lire 2 éléments en ayant seulement alloué de la place pour un seul
ELEMENT Elm; // ma structure 1 seul element ELEMENT
.....
ret = fread(&Elm,sizeof(Elm),2,fp); // Je lis 2 enregistrements de mon fichier
et là lecture de 2 ELEMENT dans Elm
d'où le probléme
cdlt
Merci, je vais essayer de modifier ça immédiatement. En effet je n'ai pas mis le fopen car il se trouve dans le main et je n'ai pas besoin de refaire une deuxième ouverture.
Comment puisse je faire le traitement des données d'un fichier en langage C?
Mes données sont dans un fichier txt et qui représentent un Arbre de défaillances de la manier suivant avec des portes logiques (OU par g*1,ET par g+0) et leurs entrées qui seront soient :d'autres portes ou des événements simple ou leurs complément (e+1 ou e-1) c'est des appellations
Exemple :
g+0 e+1 e+2 e+3 g*1 g*2
g*1 g+4 g*5
g*2 g+6 g+7
g*3 g+8 g*9
g+4 e+16 e+18 g+10
g*5 e+4 e+5
e+6 e+10 e+12 e+14
g+7 e+7 e+8 e+9 e+11 e+13 e+15
g+8 e+17 e+19 g+13
g*9 e+4 e+5
g+10 e+4 e+5 e+6 e+10 e+12 e+14
g*11 e-4 e-5 e-6
mon but est de faire la lecture de ces données puis passer à leur traitement.et d'extraire nos besoins
Mes données sont dans un fichier txt et qui représentent un Arbre de défaillances de la manier suivant avec des portes logiques (OU par g*1,ET par g+0) et leurs entrées qui seront soient :d'autres portes ou des événements simple ou leurs complément (e+1 ou e-1) c'est des appellations
Exemple :
g+0 e+1 e+2 e+3 g*1 g*2
g*1 g+4 g*5
g*2 g+6 g+7
g*3 g+8 g*9
g+4 e+16 e+18 g+10
g*5 e+4 e+5
e+6 e+10 e+12 e+14
g+7 e+7 e+8 e+9 e+11 e+13 e+15
g+8 e+17 e+19 g+13
g*9 e+4 e+5
g+10 e+4 e+5 e+6 e+10 e+12 e+14
g*11 e-4 e-5 e-6
mon but est de faire la lecture de ces données puis passer à leur traitement.et d'extraire nos besoins