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: Tout sélectionner
un
deux
trois
quatre
cinq
J'obtiens dans le fichier "ecrire" ceci:
- Code: Tout sélectionner
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: Tout sélectionner
#include
#include
#include
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;
}
