Comparaison et tri en fonction du nom du fichier
Bonjour à tous !
voilà je suis actuellement en train de réaliser un projet en langage C et avec la bibliothèque gtk+.
ce programme devra traiter des fichier .txt qui contiennent des informations (codes erreur , date , lieu ......) et afficher le dernier état du véhicule.
De plus , on devra avoir accès à une historique des états antérieurs.
Je rencontre deux problemes actuellement :
1- J'ai crée une fonction "listerFichier (char const *directory)" qui permet de lister tout les fichiers d'un repertoire (ex. : directory = "C:\\Projet"), de trier les fichiers par ordre croissant, de les stocker dans un tableau de char "chaine[i]" et de les affichers.
Mon probleme : je doit trier ces fichiers en fonction de la référence Z26XXX et dans l'ordre chronologique( la date figure dans le titre)
Reférence Date format(.txt)
Z26571_TING_180112_0956.txt
Z26567_TING_130112_1017.txt
Z26566_TING_210212_1024.txt
Z26565_TING_230212_0958.txt
Z26565_TING_060212_0954.txt
Z26565_TING_060112_0958.txt
Z26564_TING_030212_0941.txt
Z26529_TING_200212_1001.txt
.... il y a des centaines de fichiers de ce genre.
après avoir trié , je copier tout les fichier avec la meme référence
dans un meme fichier dans l'ordre chronologique.
Ma fonction ne trie uniquement par ordre décroissant en lisant chaque caractere un a un.
Je ne voi pas comment je pourrais procéder.
Mon idée : récupérer le tableau "chaine[]" dans le main , lire le nom de chaque fichier caractere par caractere pour pouvoir ensuite trier.
Mais je n'arrive pas à récupérer ce tableau.
voici ma fonction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| void listerFichier (char const *directory)
{
DIR *dir = opendir (directory);
if (dir != NULL)
{
char *chaine[512];
int i = 0;
printf ("Dossier : '%s'\n", directory);
{
struct dirent *file;
while ((file = readdir (dir)) != NULL)
{
if (strcmp (file->d_name, ".") != 0
&& strcmp (file->d_name, "..") != 0)
{
chaine[i] = strdup (file->d_name);
if (i < sizeof chaine / sizeof *chaine)
i++;
else
break;
}
}
closedir (dir);
}
{
int n = i;
for (i = 0; i < n; i++)
{
printf ("%s\n", chaine[i]);
}
printf ("Fin repertoire %s\n", directory);
for (i = 0; i < n; i++)
{
free (chaine[i]), chaine[i]=NULL;
}
}
}
} |
Merci.