Tri de fichier sequentiel

Résolu
Tydher Messages postés 123 Date d'inscription   Statut Membre Dernière intervention   -  
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   -
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 !
A voir également:

1 réponse

loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
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.
0