mastaufff | Bonjour!
Je suis en train de faire un programme gerant une base de donnée grace a des fichiers textes!
J'ai deux fichier txt un avec les données et l'autre avec un index:
Le fichier index se present comme ceci:
c'est un arbre binaire de recherche avec pour caracteristique de structure:
une clé.
un nom.
la clé du fils gauche.
la clé du fils droit.
J'ai donc créé un fonction ajouté dans l'arbre seul contrainte ne pas utiliser
de tableau:
Voici ma fonction:
Code :
- void index_bd::ajouter_bd(char* nom)
- {
- int nbrec;
- int resultat;
- bool end=false;
- index temp,temp2,temp_index,nouvau;
-
-
- FILE* findex_temp;
- fseek(findex,0,SEEK_END);
- nbrec=ftell(findex)/sizeof(index);
- temp2.cle=nbrec+1;
- strcpy(temp2.nom,nom);
- temp2.cle_gauche=0;
- temp2.cle_droite=0;
- fseek(findex,0,SEEK_SET);
- fread(&temp,sizeof(index),1,findex);
- while (end!=true)
- {
- if(feof(findex))
- {end=true;}
- else{
- resultat=strcmp(nom,temp.nom);
- if(resultat<0)
- {
- if(temp.cle_gauche!=0)
- {
- fseek(findex,(temp.cle_gauche-1)*sizeof(index),SEEK_SET);
- fread(&temp,sizeof(index),1,findex);
- }
- else
- {
- cout<<"le pere est"<<temp.cle;
- temp.cle_gauche=temp2.cle;
- end=true;
- }
- }
- else
- {
- if (temp.cle_droite!=0)
- {
- fseek(findex,(temp.cle_droite-1)*sizeof(index),SEEK_SET);
- fread(&temp,sizeof(index),1,findex);
- }
- else
- {
- cout<<"voici le pere"<<temp.cle<<endl;
- temp.cle_droite=temp2.cle;
- end=true;
- }
- }
- }
- }
- fseek(findex,0,SEEK_SET);
- findex_temp=fopen("findex_temp.txt","w" );
- fread(&temp_index,sizeof(index),1,findex);
- while(fread(&temp_index,sizeof(index),1,findex)!=0)
- {
- if(temp_index.cle!=temp.cle)
- {
- fwrite(&temp_index,sizeof(index),1,findex_temp);
- }
- else{
- fwrite(&temp,sizeof(index),1,findex_temp);
- }
- };
- fwrite(&temp2,sizeof(index),1,findex_temp);
- fclose(findex);
- fclose(findex_temp);
- findex=fopen("index.txt","w" );
- findex_temp=fopen("findex_temp.txt","r" );
- fseek(findex_temp,0,SEEK_SET);
- while(fread(&nouvau,sizeof(index),1,findex_temp)!=0)
- {
- fwrite(&nouvau,sizeof(index),1,findex);
- }
- fclose(findex);
- fclose(findex_temp);
- cout<<temp.cle_droite<<endl;
- cout<<temp.cle_gauche<<endl;
- }
|
voici ma classe index:
Code :
- class index_bd
- {
- private:
- FILE *findex;
- struct index{
- int cle;
- char nom[40];
- int cle_gauche;
- int cle_droite;
- };
-
- index* gauche;
- index* droite;
-
- public:
- index_bd();
- ~index_bd();
- void afficher_bd();
- void ajouter_bd(char nom[40]);
- void supprimer_bd(int);
- void rechercher_bd();
- };
|
en executant un debug il prend bien en compte le changement du fils droit et du fils gauche de temp (le pere) mais en faisant un affichage du
fichier index il ne me prends pas la mise a jour du pere!!!
je n'arrive pas a voir ce qui cloche dans la boucle
Code :
- while(fread(&temp_index,sizeof(index),1,findex)!=0)
- {
- if(temp_index.cle!=temp.cle)
- {
- fwrite(&temp_index,sizeof(index),1,findex_temp);
- }
- else{
- fwrite(&temp,sizeof(index),1,findex_temp);
- }
- };
|
car si la clé est identique au celle du pere il doit ecrire a la place les donnees contenue dans temp qui sont bonnes avec la verification au debug.
Si quelqu'un pouvait m'eclaircir car j'y ai deja passé l'aprem et c'est peu etre tout bete mais je ne vois pas.
Merci d'avance
|