Classer un fichier texte

Problème

Vous souhaitez classer les lignes d’un fichier texte de manière alphabétique ou selon l’ordre de votre choix.

Solution

Il faut lire le fichier et le mettre en mémoire dans son intégralité afin de le classer là. Puis nous écrivons le résultat sur le disque en remplaçant l’ancien fichier. Si le fichier est de grande taille, par rapport à la taille disponible, nous préférerons un tri directement sur le disque, au prix d’une perte de performances due à une complexité plus élevée de l’algorithme de tri.

Discussion

La lecture du fichier se fait afin d’obtenir un tableau de chaînes de caractères contenant les lignes. Puis nous appliquons un algorithme de tri quel qu’il soit. Le résultat est mis dans le fichier qui est réouvert en écriture. Voici une implémentation simplifiée du programme sort qui utilise la fonction fget_line() vue dans la première recette du chapitre. Ce programme est extrêmement simplifié car il n’est capable que de lire le fichier dont le nom est donné en premier argument, et de mettre le résultat dedans, effaçant son contenu au préalable.


#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
 
#define A_INC 10 
 
char * 
fget_line (FILE * fd, char **buffer, int *buffer_len) 
{ 
/* Voir la recette "Lire...
Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Effectuer une lecture non bloquante d'un fichier
Suivant
Lire un fichier au format DOS