ecrire un tableau dans un fichier

ecrire un tableau dans un fichier - C++ - Programmation

Marsh Posté le 20-05-2004 à 11:38:21    

voila, j'ai deux classe:
 

Code :
  1. //creation de la classe voiture
  2. class voiture
  3. {
  4.     public:
  5.  voiture ();
  6.  void saisir();
  7.  void afficher();
  8.  void modifier();
  9.  void vendre();
  10.  void controle_technique();
  11.  void menu();
  12.  char * retour_serie();
  13.         void inserer();
  14.    private:
  15.     char nom_proprio[20], ad_proprio[20], ville[50], cp[6];
  16.     char date_mise[10], date_carte[20], date_controle[10];
  17.     char num_serie[20];
  18.        
  19. };
  20. //creation de la classe prefecture
  21. class prefecture
  22. {
  23.     public:
  24.     prefecture();
  25.     void ajout_voiture();
  26. void affiche_toutes_voitures();
  27. void recherche_voiture();
  28. void vendre_voiture();
  29. void modif_controle();
  30. void menu_global();
  31.     void modifier();
  32.     void enregistrer();
  33.     private:
  34. voiture parc[1000];
  35. int nb_voiture;
  36. };


 
J'ai un tableau dans la classe prefecture que je voudrais enregistrer les données dans un fichier. Mais le probleme, c'est que je ne vois pas comment recuperer les elements privés de voiture .
 
je veux faire un truc de ce genre:
 

Code :
  1. void prefecture::enregistrer()
  2. {
  3.   int i=0;
  4.      while(i<nb_voiture )
  5.      {
  6.           //ouverture du fichier en ecriture
  7.           ofstream fichrep("c:/voiture.txt",ios::in|ios::app);
  8.             fichrep << parc[i].inserer();
  9.            fichrep.close(); //on ferme le fichier
  10.          i++;
  11.      }
  12. }


 
avec la fonction inserer(), faudrait que ca me retourne toutes les variables privé de voiture.
voyez vous comment faire cela ?
je cherche depuis hier  :sweat:


Message édité par fabien le 20-05-2004 à 11:52:34

---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 20-05-2004 à 11:38:21   

Reply

Marsh Posté le 20-05-2004 à 11:46:50    

Citation :


Code :
  1. char * retour_serie();




merde enfin, tu fais du C++, donc tu oublies les char * [:j l b]
 
sinon j'ai pas compris ton histoire d'insertion de variables privées toussa, tu peux être plus clair ?


Message édité par Harkonnen le 20-05-2004 à 11:50:04

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-05-2004 à 11:48:57    

C'est quoi ton probleme en fait ?  
C'est retourner plusieurs variables ou acceder aux champs privés ?
(ou les 2  :D )


Message édité par Slayne le 20-05-2004 à 11:49:15
Reply

Marsh Posté le 20-05-2004 à 11:51:35    

Harkonnen a écrit :

Citation :


Code :
  1. char * retourserie();




merde enfin, tu fais du C++, donc tu oublies les char * [:j l b]
 
sinon j'ai pas compris ton histoire d'insertion de variables privées toussa, tu peux être plus clair ?

le probleme c'est que je ne sais pas comment recuperer les valeur de chaque ligne du tableau pour ensuite les mettre dans un fichier.
si je vais tab[i].variable, je ne pourrais pas, vue que "variable" est un element privé de voiture et que tab[i] se trouve dans prefecture.


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 20-05-2004 à 11:55:29    

tu ferais mieux de stocker tous tes tableaux dans un std::vector<>, tu te ferais certainement moins chier, et ça irait tout seul !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-05-2004 à 11:56:25    

Harkonnen a écrit :

tu ferais mieux de stocker tous tes tableaux dans un std::vector<>, tu te ferais certainement moins chier, et ça irait tout seul !

keske c'est que ca ? [:lacuna coil]


Message édité par fabien le 20-05-2004 à 11:56:42

---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 20-05-2004 à 11:57:10    

Fabien a écrit :

le probleme c'est que je ne sais pas comment recuperer les valeur de chaque ligne du tableau pour ensuite les mettre dans un fichier.
si je vais tab[i].variable, je ne pourrais pas, vue que "variable" est un element privé de voiture et que tab[i] se trouve dans prefecture.


 
Utilise les relations d'amitiés :  
Dans ta classe Voiture : friend type inserer();
 
Mais bon, y'a peut etre plus propre, mais bon friend est là pour ça

Reply

Marsh Posté le 20-05-2004 à 12:01:33    

Fabien a écrit :

keske c'est que ca ? [:lacuna coil]


C'est un conteneur de la STL, un tableau dynamique. C'est comme un tableau normal, sauf que ça grandit dynamiquement selon la taille des données que tu y insères.
Et plutot que d'utiliser des char[] pour tes variables privées, utilise donc des std::string.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-05-2004 à 12:01:52    

Slayne a écrit :

Utilise les relations d'amitiés :  
Dans ta classe Voiture : friend type inserer();


[:aaah], mais ça va pas non ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-05-2004 à 12:10:26    

Fabien >> un exemple d'utilisation du vector et des string pour ton cas précis :
 

Code :
  1. (...)
  2. private:
  3.    string nom_proprio("" ), ad_proprio("" ), ville("" ), cp("" );
  4.    string date_mise("" ), date_carte("" ), date_controle("" );
  5.    string num_serie("" );
  6. (...)


dans ton source, tu fous tout ça dans un vector :

Code :
  1. std::vector<string> v;
  2. v.reserve(8); // réserve la mémoire pour tes 8 variables;
  3. v.push_back(nom_proprio);
  4. v.push_back(ad_proprio);
  5. // etc...


et ensuite, tu peux accéder individuellement aux différents éléments de ton vector

Code :
  1. fichrep << v[0]; // insère le nom_proprio
  2. fichrep << v[1]; // insère l'ad_proprio
  3. //etc...


Message édité par Harkonnen le 20-05-2004 à 12:11:32

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-05-2004 à 12:10:26   

Reply

Marsh Posté le 20-05-2004 à 12:27:40    

oh le beau C ... étant donné qu'il a un POD, il peut utiliser les E/S binaire (stream::read/write) mais cai vrai que c'est bien mieux les std::string et les E/S textuelles. attention au séparateur (n'est-ce pas harko)
 
d'ailleurs harko, plutot que de construire un std::vector pour faire un rséerve et des push_back, t'as le droit de le dimensionner à la création et ensuite d'assigner les différents index ... ou d'utiliser un tableau à la con

Reply

Marsh Posté le 20-05-2004 à 12:32:41    

Taz a écrit :


d'ailleurs harko, plutot que de construire un std::vector pour faire un rséerve et des push_back, t'as le droit de le dimensionner à la création et ensuite d'assigner les différents index ... ou d'utiliser un tableau à la con


c'est vrai :o
mais vu qu'il ne connaissait pas le vector, je me suis dit que ça serait mieux si j'utilisais ses méthodes, histoire de lui faire connaitre [:sinclaire]
 
Fabien >> je te traduis ce que veut dire Taz : au lieu d'écrire ça

Code :
  1. std::vector<string> v;
  2. v.reserve(8); // réserve la mémoire pour tes 8 variables;
  3.  
  4. v.push_back(nom_proprio);
  5. v.push_back(ad_proprio);


j'aurais pu écrire ça :

Code :
  1. std::vector<string> v(8);
  2. v[0] = nom_proprio;
  3. v[1] = ad_proprio;
  4. // etc...


ou ça

Code :
  1. std::string t[8];
  2. t[0]=...


Message édité par Harkonnen le 20-05-2004 à 12:39:21

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-05-2004 à 12:40:25    

c'est gentil de me donner vos codes pour faire du c++ "pure" mais le probleme c'est que c'est un projet que je dois presenter au bts, donc faut que je sache expliquer votre truc,  et pour l'instant je ne vois pas trop ce que c'est cette classe "std" la methode "vectore", la methode "push_back", bref c'est un peu du chinois.


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 20-05-2004 à 12:42:46    

laisse tomber le vector, et utilise seulement un tableau de std::string à la place, ça résoudra de toutes façons ton problème


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-05-2004 à 12:49:16    

et pour renvoyer des variables privées, je te conseille d'écrire des fonctions qui s'occupent de ça (des accesseurs) :
 

Code :
  1. public:
  2.    string GetNomProprio();
  3. private:
  4.    string nom_proprio("" );


dans voiture.cpp

Code :
  1. string GetNomProprio()
  2. {
  3.    return nom_proprio;
  4. }


ainsi tu peux accéder à nom_proprio en lecture à partir de n'importe quelle classe.
dans prefecture.cpp

Code :
  1. voiture myVoiture;
  2. fichrep << myVoiture.GetNomProprio();


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-05-2004 à 12:50:48    

Harkonnen a écrit :

Code :
  1. private:
  2.    string nom_proprio("" );



manqué, tu ne peux pas écrire ça. et des toues façons, le constructeur qui sera appelé par défaut  construit une chaine vide

Reply

Marsh Posté le 20-05-2004 à 12:51:33    

je note :jap:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-05-2004 à 12:52:50    

bon j'ai fais du bricolage et ca marche :D
 
 

Code :
  1. void voiture::inserer()
  2. {
  3. ofstream fichrep("c:/voiture.txt",ios::in|ios::app); //ouverture du fichier en ecriture
  4.    fichrep <<nom_proprio<<";"<< ad_proprio<<";"<< ville<<";"<< cp<<";"<< date_mise
  5.    <<";"<< date_carte<<";"<< date_controle<<";"<< num_serie<<"\n";
  6.    fichrep.close(); //on ferme le fichier
  7. }
  8. void prefecture::enregistrer()
  9. {
  10.   int i=0;
  11.       //on vide le fichier ou on le créé s'il n'existe pas
  12.      ofstream fichrep("c:/voiture.txt" ); //ouverture du fichier en ecriture
  13.      fichrep.close(); //on ferme le fichier
  14.      //on insere chaque voiture dans le fichier
  15.      while(i<nb_voiture )
  16.      {
  17.          this->parc[i].afficher();
  18.          parc[i].inserer();
  19.          i++;
  20.      }
  21. }


 
je verais plus tard vos solutions quand j'aurai le temps :jap:
 
bon maintenant, j'aimerai bien savoir, comment lire le fichier et pouvoir remmettre tout ca dans le tableau ?
J'ai séparer les variables par des ";" et je voudrais recuperer chaque variable .
 
Je voudrais donc transformer cette variable, et a la place de la saisie par la personne, je vais chercher la variable dans le fichier:
 

Code :
  1. void voiture::saisir()
  2. {
  3. cout<<"donner le nom proprietaire: "<<endl;
  4. cin>>this->nom_proprio;
  5. cout<<"donner l'adresse du proprietaire: "<<endl;
  6. cin.ignore();
  7. cin.getline (this->ad_proprio,sizeof(this->ad_proprio),'\n');
  8. cout<<"donner le code postal du proprietaire: "<<endl;;
  9. cin>>this->cp;
  10. cout<<"donner la ville du proprietaire: "<<endl;;
  11. cin>>this->ville;
  12. cout<<"donner la date de la mise en circulation: "<<endl;
  13. cin>>this->date_mise;
  14. cout<<"donner la date d'optention de la carte grise: "<<endl;
  15. cin>>this->date_carte;
  16. cout<<"donner la date du dernier controle technique: "<<endl;
  17. cin>>this->date_controle;
  18. cout<<"donner le numero de serie de la voiture: "<<endl;
  19. cin>>this->num_serie;
  20. }


Message édité par fabien le 20-05-2004 à 12:56:00

---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 20-05-2004 à 12:55:04    

bon moi je vais bouffer hein, je te laisse en pature à Taz :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-05-2004 à 12:55:34    

ios::in|ios::app); //ouverture du fichier en ecriture  
 
manqué ...
 
';' et pas ";"
 
pas la peine de fermer tes fichiers, ça se fait tout seul
 
 
               this->parc[i].afficher();
               parc[i].inserer();
 
un peu de cohérence bordel

Reply

Sujets relatifs:

Leave a Replay

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