Trier un fichier

(Cliquez-ici pour accéder à la version originale de cette discussion avec couleurs et images)







Posted by: Premium

Bonjour,

le code suivant devrait me permettre de trier selon l'ordre lexicographique le fichier "lire" et écrire le résultat dans le fichier "écrire"

Je n'ai pas le résultat souhaité.

Mon fichier "lire" est écrit de cette manière.
Un mot par ligne:
Code:
un deux trois quatre cinq


J'obtiens dans le fichier "ecrire" ceci:
Code:
deux trois quatre cinq

ce qui n'est pas ce que je souhaite.

Si vous pouviez m'aider à résoudre ce problème.

PS: pour faire le tri ,je dois utiliser fseek et ftell sans passer par un tableau

Merci d'avance




Code:
#include <stdio.h> #include <string.h> #include <stdlib.h> int tri(FILE *flotLecture, FILE *flotEcriture, int(*cmp)(const char *s1, const char *s2)) { char ligne1[15]; char ligne2[15]; if(flotLecture == NULL) return 1; if(flotEcriture == NULL) return 1; long courant; while(fgets(ligne1, sizeof ligne1, flotLecture) != NULL) { courant = ftell(flotLecture); while(fgets(ligne2, sizeof ligne2, flotLecture) != NULL) { if((*cmp)(ligne1,ligne2) > 0) { char buf[BUFSIZ]; strcpy(buf,ligne1); char *tmp1 = malloc(strlen(ligne2)+1); if(tmp1 == NULL) return 1; strcpy(tmp1,ligne2); char *tmp2 = malloc(strlen(buf)+1); if(tmp2 == NULL) return 1; strcpy(tmp2,buf); fprintf(flotEcriture,"%s",tmp1); free(tmp1); free(tmp2); } } fseek(flotLecture,courant,SEEK_CUR); } fclose(flotEcriture); fclose(flotLecture); return 0; } int main(int argc, char *argv[]) { FILE *lecture = fopen("lire","r"); FILE *ecriture = fopen("ecrire","w"); if(tri(lecture,ecriture,&strcmp)) { fprintf(stderr,"erreur \n"); } return EXIT_SUCCESS; }












-