Langage C : Enregistrements dans des fichiers

Maxicoco Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
 haifa -
Bonjour,
Je suis étudiant en première année d'informatique et je bloque sur un TP que je dois réaliser. Je dois exécuter mon programme en passant 3 noms de fichiers comme paramètres dans le main , jusque la pas de problème, chacun de ces fichiers contient des enregistrements différents.
Comment je peux savoir quels fichiers contient quels enregistrements pour pouvoir poursuivre le traitement ? Et éventuellement savoir quel(s) fichier(s) est/sont manquant(s) si l'utilisateur entre par exemple 1 ou 2 noms de fichiers seulement .
Merci d'avance pour votre aide!
A voir également:

5 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Ton seul moyen est de lire le fichier puisqu'a priori c'est là que se trouve les enregistrements. En lisant les fichiers passés en paramètre, tu sauras par déduction les enregistrements et par conséquent les fichiers qui manquent.
1
Maxicoco Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour ta réponse,
J'ai essayé avec fread, mais la fonction place indifféremment les données lues dans le fichier, dans la variable que j'ai choisie, meme si les données lues ne sont pas du meme type que la variable qui reçoit les données.
Comment je peux savoir sans afficher a l'ecran pour detecter les erreurs si les donnees placées dans la variables sont bien du même type que la variable.
Désolé si je ne suis pas claire, j'ai un peu de mal a expliquer...

Exemple :
Enregistrements :

typedef
struct
{
char nom[11];
char syntaxe[81];
}
TEnregistrement1;

typedef
struct
{
int prio;
char utilisateur[71];
}
TEnregistrement2;

Supposons maintenant que j'ai un fichier contenant un seul des deux enregistrement, j'ai éssayé de lire les données avec un fread, une fois en plaçant les données lues dans une variable de type TEnregistrement1, l'autre fois en les plaçant dans une variable de type TEnregistrement2. J'avais pensé que l'une des deux fonctions allait me renvoyer une erreur pourtant ce n'est pas le cas, ferror ne m'indique pas quelle fonction a "déconnée ".
Y a t'il une autre fonction qui permet de placer les données lues dans une variable et de renvoyé un code erreur si les données ne sont pas du même type que la variable?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Une solution toute simple est de mettre en début de fichier une ligne destinée à indiquer le type de fichier. Par exemple : #type 1.
Si cette solution ne te convient pas, tu devras parser les enregistrements jusqu'à une donnée qui te permettra de distinguer avec sûreté le type d'enregistrement.
Par exemple, dans ton cas TEnregistrement1 a un type <int> et TEnregistrement2 un type <char[11]>.
La donnée à lire la plus restrictive est l'int. Tu vas donc supposer que le fichier est de type TEnregistrement2 est lire l'int avec un simple fscanf. Si la lecture se passe mal c'est que ce n'est pas un entier, et donc il s'agit probablement d'un fichier TEnregistrement2.
Comme tu peux le voir, la deuxième méthode est plus compliquée.

J'espère ne pas avoir été trop brouillon dans mes explications.
N'hésite pas à demander un complément d'information.

Cdlt,
0
sco
 
void main ()
{
FILE *nom_fiche;
nom_fiche=fopen(saisie le place d'enregistrement par exemple:"c:\ fiche.txt,"r");
}
/// teste si le fiche est existe ou non
void main ()
{
FILE *nom_fiche;
nom_fiche=fopen(:"c:\ fiche.txt,"r");
if (non_fiche==NULL)

printf ("Impssoble d'ouvrire le fiche ");

else
printf(" le fiche ouvert");
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
haifa
 
#include<stdio.h>
#include<string.h>
void main ()
{
FILE *nom_fiche;
nom_fiche=fopen(saisie le place d'enregistrement par exemple:"c:\ fiche.txt,"r");
}
/// teste si le fiche est existe ou non
void main ()
{
FILE *nom_fiche;
nom_fiche=fopen(:"c:\ fiche.txt,"r");
if (non_fiche==NULL)

printf ("Impossible d'ouvrire ce fiche ");

else
printf(" le fiche ouvert");
}
}
0