Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
918 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  ecrire un tableau dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

ecrire un tableau dans un fichier

n°732553
fabien
Vive la super 5 !
Posté le 20-05-2004 à 11:38:21  profilanswer
 

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
mood
Publicité
Posté le 20-05-2004 à 11:38:21  profilanswer
 

n°732560
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-05-2004 à 11:46:50  profilanswer
 

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)
n°732569
Slayne
Yaouchhh
Posté le 20-05-2004 à 11:48:57  profilanswer
 

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
n°732573
fabien
Vive la super 5 !
Posté le 20-05-2004 à 11:51:35  profilanswer
 

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
n°732579
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-05-2004 à 11:55:29  profilanswer
 

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)
n°732582
fabien
Vive la super 5 !
Posté le 20-05-2004 à 11:56:25  profilanswer
 

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
n°732586
Slayne
Yaouchhh
Posté le 20-05-2004 à 11:57:10  profilanswer
 

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

n°732591
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-05-2004 à 12:01:33  profilanswer
 

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)
n°732592
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-05-2004 à 12:01:52  profilanswer
 

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)
n°732609
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-05-2004 à 12:10:26  profilanswer
 

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)
mood
Publicité
Posté le 20-05-2004 à 12:10:26  profilanswer
 

n°732638
Taz
bisounours-codeur
Posté le 20-05-2004 à 12:27:40  profilanswer
 

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

n°732649
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-05-2004 à 12:32:41  profilanswer
 

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)
n°732661
fabien
Vive la super 5 !
Posté le 20-05-2004 à 12:40:25  profilanswer
 

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
n°732662
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-05-2004 à 12:42:46  profilanswer
 

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)
n°732670
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-05-2004 à 12:49:16  profilanswer
 

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)
n°732672
Taz
bisounours-codeur
Posté le 20-05-2004 à 12:50:48  profilanswer
 

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

n°732674
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-05-2004 à 12:51:33  profilanswer
 

je note :jap:


---------------
J'ai un string dans l'array (Paris Hilton)
n°732676
fabien
Vive la super 5 !
Posté le 20-05-2004 à 12:52:50  profilanswer
 

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
n°732678
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-05-2004 à 12:55:04  profilanswer
 

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


---------------
J'ai un string dans l'array (Paris Hilton)
n°732680
Taz
bisounours-codeur
Posté le 20-05-2004 à 12:55:34  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  ecrire un tableau dans un fichier

 

Sujets relatifs
[ASP 3.0] FSO + Probleme pour renommer un fichieraccess vba pb boucle impression ds fichier pdf + copie du fichier
[JAVA] problème de lecture de fichierExtends un tableau basique, c'est impossible ?
[PHP] Modifier un fichier xml avec php/domxml[résolu] Créé un fichier sur le hdd
[php]Lire un fichier et reprendre les données[c][Resolu]Passage d'un tableau à une fonction
[VB6] probleme pour lire un fichier avec Open[C] ecrire un tableau[N][N] en binaire dans un fichier
Plus de sujets relatifs à : ecrire un tableau dans un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR