Trier un fichier

Discutez d'informatique ici !
Anonyme

Trier un fichier

par Anonyme » 21 Jan 2006, 10:38

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: 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;
}



 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite