creation d'un index

creation d'un index - C - Programmation

Marsh Posté le 24-03-2008 à 18:19:06    

Bonjour, je realise un programme et j'aimerai realiser un index...
 
Mon index se cree avec les fichiers.
 
C'est a dire, J'ai mon fichier, et il contient deux enregistrement sous forme de structure et j'aimerai trier les enregistrements
que j'ai dans mon fichier par ordre alphabetique sur le nom dans une structure index. Seulement ca ne vas et je comprend pas pourquoi...
 
Auriez vous une solution ??
 
nproduit = le nombre d'enregistrement qu'il y a dans le fichier
 

Code :
  1. fseek(fproduit,0,SEEK_SET);
  2. i=0;
  3. while(fread(&produit,sizeof(struct produit),1,fproduit)==1 && i<nproduit)
  4. {
  5.     printf("%s", p->NomProduit);
  6.     system("pause" );
  7.     a=i-1;
  8.     while ((a>=0) && strcmp(p->NomProduit,index[a].NomProduit)<0)
  9.     {
  10.          strcpy(index[a+1].NomProduit, index[a].NomProduit);
  11.          index[a+1].NumProduit=index[a].NumProduit;
  12.          index[a+1].Posi=index[a].Posi;
  13.          a--;
  14.     }
  15.     strcpy(index[a+1].NomProduit, p->NomProduit);
  16.     index[a+1].NumProduit=p->NumProduit;
  17.     index[a+1].Posi=i;
  18.     i++;
  19. }


 
Merci beaucoup, et à tres bientot j'espere !
 

Reply

Marsh Posté le 24-03-2008 à 18:19:06   

Reply

Marsh Posté le 25-03-2008 à 11:24:32    

Déjà t'as des structs, donc tu peux utiliser = au lieu de faire la recopie membre par membre à la main.
 
Ensuite, ce que tu fais c'est assez couteux. Il y a pas mal de littérature sur comment faire un fichier ordonné: tu peux utiliser une tâble de hachag, une liste chaînée, etc. C'est un poil plus compliqué à mettre en place, mais ça tournera mieux que de trier à chaque fois (surtout trier directement dans le fichier). Essaie de faire un truc simple: tes enregistrements sont à taille fixe, tu peux faire une liste chainée avec un .next qui te donne la position de l'enregistrement suivant. Apres, il te suffit d'insérer dans l'ordre.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed