Tri de fichier sequentiel
Résolu
Tydher
Messages postés
127
Statut
Membre
-
loupius Messages postés 789 Statut Membre -
loupius Messages postés 789 Statut Membre -
Bonjour à tous, voila mon souci.
Après de longues recherches et beaucoup d'imcomprehension (sur qsort), je voudrais savoir comment effectué un tri dans un fichier sequentiel.
Le but du programme est de faire un agenda en C, et l'affichage devrait etre trié par date.
Seulement voila je ne sais pas comment faire.
Voila les structures que je doit utilisé :
struct RDV {date drdv; int dureerdv; }rdv ;
struct PERS {chaine30 nom; // Nom
chaine30 prenom; // Prénom
date dnaiss; // Date de Naissance
RDV *Trdv; // pointeur pour Tableau de Rendez-Vous
int nbrdv ; // Nbre de RDV figurant dans le tableau Trdv
}PERS;
Merci à tous !
Après de longues recherches et beaucoup d'imcomprehension (sur qsort), je voudrais savoir comment effectué un tri dans un fichier sequentiel.
Le but du programme est de faire un agenda en C, et l'affichage devrait etre trié par date.
Seulement voila je ne sais pas comment faire.
Voila les structures que je doit utilisé :
struct RDV {date drdv; int dureerdv; }rdv ;
struct PERS {chaine30 nom; // Nom
chaine30 prenom; // Prénom
date dnaiss; // Date de Naissance
RDV *Trdv; // pointeur pour Tableau de Rendez-Vous
int nbrdv ; // Nbre de RDV figurant dans le tableau Trdv
}PERS;
Merci à tous !
A voir également:
- Tri de fichier sequentiel
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
1 réponse
Bien sûr une base de données serait plus adaptée.
Je suppose que tu as deux fichiers, un pour les personnes et un pour les rendez-vous.
Je ne considèrerai que le seul fichier 'Personne'.
Avec 'qsort', Il faut bien savoir deux choses:
- 'qsort' ne peut trier qu'une table composée d'éléments de même taille,
- 'qsort' fait appel à une fonction de comparaison en lui passant deux pointeurs (de type void) sur les deux éléments à comparer.
Dans ton cas, il y a deux solutions:
- le fichier est petit et tout peut être traité en mémoire; alors tu charges ton fichier dans un tableau de structure PERS et tu tries classiquement; une fois triée tu peux sauvegarder le tableau dans un fichier,
- le fichier est trop gros; alors on peut construire un tableau d'entier (de taille égale au nombre d'enregistrement) et remplir ce tableau avec 0, 1, 2, 3, ..., puis il suffit de trier ce tableau... Ne vous fichez pas de moi, je ne vous ai pas encore dit comment faire. En fait tout est dans la fonction de comparaison: 'qsort' va donner deux pointeurs sur deux entiers (par exemple 5 et 8), la fonction va lire dans le fichier le 5ème et le 8ème enregistrement et retourner le résultat de la comparaison (qui n'a donc rien à voir avec le nombre 5 ou 8).
Bonne réflexion.
Je suppose que tu as deux fichiers, un pour les personnes et un pour les rendez-vous.
Je ne considèrerai que le seul fichier 'Personne'.
Avec 'qsort', Il faut bien savoir deux choses:
- 'qsort' ne peut trier qu'une table composée d'éléments de même taille,
- 'qsort' fait appel à une fonction de comparaison en lui passant deux pointeurs (de type void) sur les deux éléments à comparer.
Dans ton cas, il y a deux solutions:
- le fichier est petit et tout peut être traité en mémoire; alors tu charges ton fichier dans un tableau de structure PERS et tu tries classiquement; une fois triée tu peux sauvegarder le tableau dans un fichier,
- le fichier est trop gros; alors on peut construire un tableau d'entier (de taille égale au nombre d'enregistrement) et remplir ce tableau avec 0, 1, 2, 3, ..., puis il suffit de trier ce tableau... Ne vous fichez pas de moi, je ne vous ai pas encore dit comment faire. En fait tout est dans la fonction de comparaison: 'qsort' va donner deux pointeurs sur deux entiers (par exemple 5 et 8), la fonction va lire dans le fichier le 5ème et le 8ème enregistrement et retourner le résultat de la comparaison (qui n'a donc rien à voir avec le nombre 5 ou 8).
Bonne réflexion.