C++ objets et fichiers

C++ objets et fichiers - C++ - Programmation

Marsh Posté le 12-04-2004 à 16:40:36    

Bonjour,  
 
J'ai une classe employé qui contient 3 strings (nom,prenom et poste) et 2 int (age et numero). ( C++ )
J'aurais voulu savoir comment stocker toutes ces données dans un fichier qui me permettrait
- de rajouter des elements par la suite.
- de modifier les informations d un employé.
- de consulter les info d un ou de la totalité des employés.
 
Merci d avance.

Reply

Marsh Posté le 12-04-2004 à 16:40:36   

Reply

Marsh Posté le 12-04-2004 à 18:22:12    

Si tu sais ecrire un string dans un fichier alors voila le bout de code qu'il te manque. Petite limitation, les champs string de ta classe contiennent un seul mot.
 

Code :
  1. struct employe
  2. {
  3. std::string nom;
  4. std::string prenom;
  5. std::string poste;
  6. int age;
  7. int numero;
  8. employe() : nom("" ), prenom("" ), poste("" ), age(0), numero(0) {}
  9. employe( const std::string & nm, const std::string & pnm, const std::string & p, const int & a, const int & n ) :
  10. nom(nm), prenom(pnm), poste(p), age(a), numero(n) {}
  11. std::string Serialize() const
  12. {
  13. std::ostringstream strTemp("" );
  14. strTemp << nom << " " << prenom << " " << poste << " " << age << " " << numero << std::endl;
  15. return strTemp.str();
  16. }
  17. void Deserialize( const std::string & s)
  18. {
  19. std::istringstream strTemp(s);
  20. strTemp >> nom >> prenom >> poste >> age >> numero;
  21. }
  22. };


 
--edit, un main d'exemple:
 

Code :
  1. int main()
  2. {
  3. std::string strTemp("" );
  4. {
  5. employe toto("laurentino","jcpas","clown",98,13); // désolé ;)
  6. std::cout << toto.Serialize(); // verif
  7. strTemp = toto.Serialize(); // conversion en string pour l'ecriture
  8. }
  9. // ecrire strTemp dans un fichier texte....
  10. std::cout << strTemp;
  11. // lecture strTemp dans le fichier texte...
  12. {
  13. employe titi; // création d'un employé vide
  14. titi.Deserialize(strTemp); // initialisation à partir de la lecture
  15. std::cout << titi.Serialize(); // verif
  16. }
  17. }


A tester.
Xter.


Message édité par xterminhate le 12-04-2004 à 18:41:22
Reply

Marsh Posté le 12-04-2004 à 18:46:12    

Je vais tester tout de suite...
Juste une petite question,  
Struct et class c est la meme chose ?
je te tiens au courant si ca marche.
MERCI!

Reply

Marsh Posté le 12-04-2004 à 19:01:46    

Je ne maitrisie pas toutes les subitlités mais ...
 
Il me semble que class permet de classifier les membres en public: , protected: ou private: contrairement à struct dont tous les membres sont publics.
 
Pour le reste, struct et class sont similaires.
 
Cordialement,
 xter.

Reply

Marsh Posté le 12-04-2004 à 19:13:55    

Ouais d accord merci  
 
mais le const dans "std::string Serialize() const"  
 
ca signifie quoi ?
 
merci

Reply

Marsh Posté le 12-04-2004 à 19:16:13    

Const signifie dans ce contexte que la fonction membre Serialize() s'execute sans rien modifier au contenu de la structure/classe. Ca doit sans doute aider le compilo à optiliser le code qui en découle...
 
Cordialement,
  xter.

Reply

Marsh Posté le 12-04-2004 à 19:22:22    

Message d erreur ...
11 C:\Laurent\Pre\employe.cpp
variable `std::ostringstream strTemp' has initializer but  
 
pas de suite, peut un #include a ajouter ?

Reply

Marsh Posté le 12-04-2004 à 19:25:02    

trouvé : #include <sstream>

Reply

Marsh Posté le 12-04-2004 à 19:29:12    

oui j'avais oublié ...
#include <string>
#include <sstream>
#include <iostream>

Reply

Marsh Posté le 12-04-2004 à 19:37:51    

CA MARCHE !!!!!
Merci t es un pote !!!!!
J'avais vraiment besoin que ca marche pour demain....
J ai pas regardé toutes les subtilitées mais en tout cas je te remercie enormement! tu peux pas savoir a quel point je te suis reconnaissant.

Reply

Marsh Posté le 12-04-2004 à 19:37:51   

Reply

Marsh Posté le 12-04-2004 à 19:57:16    

laurentino a écrit :

CA MARCHE !!!!!
Merci t es un pote !!!!!
J'avais vraiment besoin que ca marche pour demain....
J ai pas regardé toutes les subtilitées mais en tout cas je te remercie enormement! tu peux pas savoir a quel point je te suis reconnaissant.


 
Prends le temps de regarder !!  :o  J'ai bien pris le temps de te le coder.
 
Sinon, de rien.
 
Cordialement,
   xter.


Message édité par xterminhate le 12-04-2004 à 19:57:38

---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 12-04-2004 à 20:02:11    

Sinon tu sais pas comment on ecrit sur un fichier contenant deja des trucs sans effacer ce qu il contenait ?
J ai cherchait partout...
Je trouve qu une solution pour le moment c est de creer un dossier temporaire recopier l'ancien fichier de donneés,et y rajouter tout ce qu on veut rajouter mais ca peut s averer long quand on a un gros fichier.
 
Merci @++

Reply

Marsh Posté le 12-04-2004 à 20:06:33    

L'ouverture du fichier
 

Code :
  1. // ajouter dans le main() :
  2. // ecrire strTemp dans un fichier texte....
  3. std::ofstream fichier( "nom_fichier.txt", std::ofstream::app);
  4. fichier << strTemp;


 
 
Penser à #include<fstream>.
 
Xter.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 12-04-2004 à 20:08:29    

xterminhate a écrit :

Je ne maitrisie pas toutes les subitlités mais ...
 
Il me semble que class permet de classifier les membres en public: , protected: ou private: contrairement à struct dont tous les membres sont publics.
 
Pour le reste, struct et class sont similaires.
 
Cordialement,
 xter.


 
une classe et une struct ont comme seule difference que par défaut, dans une classe, les membres sont privés, dans une struct ils sont public.
 

Code :
  1. class test1
  2. {
  3.   int i; // i est privé
  4. };
  5. struct test2
  6. {
  7.   int i; // i est public
  8. };


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 12-04-2004 à 20:10:04    

on peut placer un protected: dans une struct ?
 
Je n'ai jamais essayé... lol
 
Merci BlackGoddess,
  Xter.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 12-04-2004 à 20:25:17    

oui struct = class mais vu que struct est un mot partager avec le language c, pour des raison de retro compatibiliter les membre sont par defaut public
 
edit: pas partager mais gardé pour ces raisons de compatibilite


Message édité par skelter le 12-04-2004 à 20:27:50
Reply

Marsh Posté le 12-04-2004 à 22:23:27    

WAHOUUUUUUUU ca marche aussi pour les fichiers !!!
Nikel je suis vraiment aux anges.
Re-merci.

Reply

Marsh Posté le 12-04-2004 à 22:33:11    

Ce sera tout pour ce soir ? ;) La prochaine fois, balance direct l'énoncé de ton exercice....
 
Cordialement,
   xter.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 12-04-2004 à 22:36:45    

c est pas un exercice, c est le preliminaires pour mon stage qui commence demain ...

Reply

Marsh Posté le 12-04-2004 à 22:37:06    

Merci pour tout ! ;-)

Reply

Marsh Posté le 16-04-2004 à 19:14:30    

Et comment on fait maintenant pour lire dans le fichier texte ainsi créé ? ( se placer en debut, et lire toute une ligne )

Reply

Marsh Posté le 16-04-2004 à 19:16:30    

Reply

Marsh Posté le 16-04-2004 à 19:21:34    

Maintenant qu'il a assimilé les bases, .... ca lui fera de la lecture :p


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 16-04-2004 à 19:29:00    

pas qu'à lui

Reply

Marsh Posté le 16-04-2004 à 19:46:21    

C est pas comment deserialiser que je cherche mais comment lire une ligne dans un fichier !
 
Et l'anglais, moyen ... :-(

Reply

Marsh Posté le 16-04-2004 à 19:52:03    

Code :
  1. std::ifstream fichier("fichier.txt" );
  2. if( fichier.is_open() )
  3. {
  4. std::string str;
  5. fichier >> str;
  6. }


 
--edit : sinon taz pourrait m'en vouloir  :jap:


Message édité par xterminhate le 16-04-2004 à 20:06:12

---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 16-04-2004 à 19:54:03    

ou
 

Code :
  1. std::ifstream fichier("fichier.txt" ); 
  2. if( fichier.is_open() ) 
  3. std::string str;
  4. getline(fichier, str);
  5. }


--edit : idem


Message édité par xterminhate le 16-04-2004 à 20:06:30

---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 16-04-2004 à 20:02:44    

getline lit une ligne, >> un mot
 
 
("" ) me parait inutile

Reply

Marsh Posté le 16-04-2004 à 20:04:04    

Merci Xter ...
 
Je savais que je pouvais compter sur toi !!!
 
Si je me trompe pas fichier >> str prendra que jusqu au premier espace non ?
 
MERCI

Reply

Marsh Posté le 16-04-2004 à 20:05:17    

oui d'ou le second exemple qui prend la première ligne.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 16-04-2004 à 20:31:51    

Ouais mais quand on ouvre le fichier on est en fin de fichier non ?
Faut se placer en debut ... mais on fait comment ?
Je l'avais deja demandé plus haut.
 
(désolé si vous me trouvez lourd )

Reply

Marsh Posté le 16-04-2004 à 20:35:03    

t'es lourd. tu peux pas lire la documentation comme tout le monde ?

Reply

Marsh Posté le 16-04-2004 à 20:53:48    

+1
 
la c'est abusé ce que tu demande laurentino

Reply

Marsh Posté le 16-04-2004 à 20:54:02    

c est plus court de repondre il me semble mais c est pas grave.
La doc en anglais j y pipe rien moi alors ....
Et puis t es pas obligé de repondre si ca te saoule.
 
MERCI

Reply

Marsh Posté le 16-04-2004 à 20:56:51    

ta meme pas chercher en francais, pourtant c'est pas ca qui manque, et si tu lit pas l'anglais t foutu
 
http://casteyde.christian.free.fr/ [...] x7588.html

Reply

Marsh Posté le 16-04-2004 à 21:00:23    

laurentino a écrit :

c est plus court de repondre il me semble mais c est pas grave.
La doc en anglais j y pipe rien moi alors ....
Et puis t es pas obligé de repondre si ca te saoule.
 
MERCI

t'es surtout une grosse feignasse qui flood le forum de questions sur le fichier alors que tout est écrit sur les liens de que tout le monde te redonne sans cesse

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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