Liste chainée et lecture d'un fichier txt

Signaler
Messages postés
19
Date d'inscription
lundi 25 novembre 2002
Statut
Membre
Dernière intervention
11 septembre 2005
-
Messages postés
19
Date d'inscription
lundi 25 novembre 2002
Statut
Membre
Dernière intervention
11 septembre 2005
-
Bonjour

j'ai un probleme pour charger des données depuis un fichier texte, les données recupérées doivent etre stocké dans un liste chainée déclaré ainsi

#ifndef repertoire_h
#define repertoire_h
// Déclaration de la structure data
struct data
{
int ref;
char nom[20];
char prenom[20];
char tel[11];
struct data *next; // pointeur vers une structure data
};

// On crée une structure PERSON de type data
typedef struct data PERSON;
// On cree LINK de type PERSON *
typedef PERSON *LINK;

// les données sont sauvegardé ainsi :

LINK save(LINK head) // Fonction de sauvegarde des données -- QUI MARCHE SANS PBS !
{
// Declaration des variables
char *ext=".txt";
char nom[21];
FILE *sortie;
LINK current;
current=head;
printf("Sauvegarde : \n");
// Saisie du nom de fichier
printf("Entrez le nom du fichier (sans extension) :");
scanf("%s",nom);
strcat(nom,ext);

if ((sortie=fopen(nom,"w"))==NULL) // Si l'ouverture s'est mal passée
{
printf("Erreur a l'ouverture du fichier %s. \n",nom);// Message d'erreur
system("PAUSE");
exit(0);
}

else // Sinon
{
while(current!=NULL) // Tant que la liste existe
{
// Sauvegarde des données
fprintf(sortie,"%d\n",current->ref);
fprintf(sortie,"%s\n",current->nom);
fprintf(sortie,"%s\n",current->prenom);
fprintf(sortie,"%s\n",current->tel);
current=current->next;
}
}
// Ferme le fichier
fclose(sortie);
return(head);
}

// ma fonction load pour le moent - MARCHE PAS DU TOUT !! - Charge rien

LINK load(LINK head)
{
// Declaration des variables
char *ext=".txt";
char nom[21];
char nom_f[21];
char prenom_f[21];
char tel_f[11];
FILE *entree;
LINK current;
current=head;
printf("Chargement : \n");
// Saisie du nom de fichier
printf("Entrez le nom du fichier (sans extension) :");
scanf("%s",nom);
strcat(nom,ext);

if ((entree=fopen(nom,"r"))==NULL) // Si l'ouverture s'est mal passée
{
printf("Erreur a l'ouverture du fichier %s. \n",nom);// Message d'erreur
system("PAUSE");
exit(0);
}

else // Sinon
{
while(current!=NULL) // Tant que la liste existe
{
// Chargement des données
fscanf(entree,"%d\n",current->ref);
fscanf(entree,"%s\n",nom_f);
fscanf(entree,"%s\n",prenom_f);
fscanf(entree,"%s\n",tel_f);
strcpy(current->prenom,prenom_f);
strcpy(current->nom,nom_f);
strcpy(current->tel,tel_f);
current=current->next;
}
}
printf("Chargement Reussi !!");
system("PAUSE");
// Ferme le fichier
fclose(sortie);
return(head);
}

voila si quelqu'un pouvait m'aider à la faire fonctionner ca m'aiderai bcp ... en + c'est assez urgent

Merci d'avance

whiteknight

2 réponses

Messages postés
45
Date d'inscription
jeudi 10 octobre 2002
Statut
Membre
Dernière intervention
6 décembre 2002

hy,
pour moi ta fonction load devrait réaliser à chaque tour de boucle une allocation mémoire d'un poste puis réaliser le chaînage.... ce que tu ne fais pas!
l'lo
Messages postés
19
Date d'inscription
lundi 25 novembre 2002
Statut
Membre
Dernière intervention
11 septembre 2005

Slt

merci de ta réponse c'était effectivement cela !! j'ai eu du mal à m'en apercevoir mais ca marche maintenant merci !

ciao