problème de lecture de fichier sous vc++ 6

problème de lecture de fichier sous vc++ 6 - C++ - Programmation

Marsh Posté le 04-07-2002 à 01:00:48    

j'ai un problème de lecteure de fichier
 
mon fichier a la forme
 
smith;john;
gagne;eric;
primeau;berthrand;
 
voici mon code
 

Code :
  1. std::vector<Client> vClient;
  2. vClient;
  3. Client client;
  4. char tmp[30];
  5. int notmp;
  6. ifstream infile ("client.dat", ios::in);
  7. if (infile)
  8. {
  9.   while(! infile.eof())
  10.   {
  11.     infile>>tmp;
  12.     client.setnom(tmp);
  13.     infile>>";";
  14.     infile>>tmp;
  15.     client.setprenom(tmp);
  16.     infile>>";";
  17.    
  18.     infile>>"\n";
  19.     vClient.push_back(client);
  20.   }
  21. }
  22. infile.close();


Message édité par os2 le 04-07-2002 à 01:31:31

---------------
Borland rulez: http://pages.infinit.net/borland
Reply

Marsh Posté le 04-07-2002 à 01:00:48   

Reply

Marsh Posté le 04-07-2002 à 08:17:51    

Code :
  1. std::vector<Client> vClient;
  2. vClient;
  3. Client client;
  4. char tmp[30];
  5. int notmp;
  6. ifstream infile ("client.dat", ios::in);
  7. if (infile.is_open()
  8. {
  9. infile.getline(tmp,30);//Effectuer au moin une lecture avant de tester eof
  10. while(! infile.eof())
  11. {
  12.    char *field = strtok(tmp,";" );//premier champ
  13.    client.setnom(field );
  14.    field = strtok(0,";" );//deuxiemechamp
  15.    client.setprenom(field );
  16.      
  17.    vClient.push_back(client);
  18.    infile.getline(tmp,30);
  19. }
  20. }
  21. infile.close();


---------------
Le Tyran
Reply

Marsh Posté le 04-07-2002 à 16:25:44    

sin on a plus de deux champs on fait quoi?
 
car faire
field = strtok(1,";" );
 
ça ne fonctionne pas


---------------
Borland rulez: http://pages.infinit.net/borland
Reply

Marsh Posté le 04-07-2002 à 16:33:43    

Regarde la description de strtok...
 
strtok(chaine,delimiteur) initialise le parcour et renvois le premier champs.
strtok(0,delimiteur)      renvoi le champ suivant.
 
Tu appel donc strtok(0,delimiteur) jusqu'à ce que tu ai fait tous te champs
 


---------------
Le Tyran
Reply

Marsh Posté le 04-07-2002 à 17:20:12    

j'ai ce que j'avais tenté mais j'ai eu des erreurs
 
j'ai tenté une autre voi
voici le code

Code :
  1. #include <fstream.h>
  2. int main()
  3. {
  4. char nom[30];
  5. char prenom[30];
  6. char telephone[30];
  7. char adresse[40];
  8. char ville[30];
  9. char codepostal[7];
  10. char province[4];
  11. int age;
  12. char no_carte[30];
  13. ifstream infile ("client.dat", ios::in);
  14. infile>>nom; //plante ici
  15. cout<<nom;
  16. infile>>";";
  17. infile>>prenom>>";";
  18. infile>>telephone>>";";
  19. infile>>adresse>>";";
  20. infile>>ville>>";";
  21. infile>>codepostal>>";";
  22. infile>>province>>";";
  23. infile>>age>>";";
  24. infile>>no_carte>>";";
  25. infile>>"\n";
  26. return 1;
  27. }


 
et mon fichier contient
 
marc;collin;4406477228;946 roule;vaudreuil;j1j1r5;qc;14;allo;
roger;dumais;5413432128;115 dumahel;montreal;h3b1r8;qc;23;nanane;
 
 
pourtant je crois bien que ça devrait marché
 
quelqu''un sait pourquoi ça fonctionne pas?


Message édité par os2 le 04-07-2002 à 23:01:40

---------------
Borland rulez: http://pages.infinit.net/borland
Reply

Marsh Posté le 04-07-2002 à 23:03:32    

:bounce:  :bounce:  :bounce:  :bounce:  :bounce:  :bounce:  :bounce:  :bounce:  :bounce:  :bounce:  :bounce:  :bounce:  :bounce:


---------------
Borland rulez: http://pages.infinit.net/borland
Reply

Marsh Posté le 05-07-2002 à 08:16:53    

os2 a écrit a écrit :

j'ai ce que j'avais tenté mais j'ai eu des erreurs
 
j'ai tenté une autre voi
voici le code

Code :
  1. #include <fstream.h>
  2. int main()
  3. {
  4. char nom[30];
  5. char prenom[30];
  6. char telephone[30];
  7. char adresse[40];
  8. char ville[30];
  9. char codepostal[7];
  10. char province[4];
  11. int age;
  12. char no_carte[30];
  13. ifstream infile ("client.dat", ios::in);
  14. infile>>nom; //plante ici
  15. cout<<nom;
  16. infile>>";";
  17. infile>>prenom>>";";
  18. infile>>telephone>>";";
  19. infile>>adresse>>";";
  20. infile>>ville>>";";
  21. infile>>codepostal>>";";
  22. infile>>province>>";";
  23. infile>>age>>";";
  24. infile>>no_carte>>";";
  25. infile>>"\n";
  26. return 1;
  27. }


 
et mon fichier contient
 
marc;collin;4406477228;946 roule;vaudreuil;j1j1r5;qc;14;allo;
roger;dumais;5413432128;115 dumahel;montreal;h3b1r8;qc;23;nanane;
 
 
pourtant je crois bien que ça devrait marché
 
quelqu''un sait pourquoi ça fonctionne pas?




 
Normal, pas assez d'espace dans nom pour chopper toute la ligne


---------------
Le Tyran
Reply

Marsh Posté le 05-07-2002 à 20:42:09    

finalement j'utilise des getline
mais j'ai remarqué des anomalies quand je lis le fichier ayant
 
marc;collin;450667228;606 roule;hongueuil;r4r1t5;qc;141202;allo;
 
infile.getline(nom,30,';';);          //char nom[30]
infile.getline(prenom,30,';';);       //char prenom[30]
infile.getline(telephone,12,';';);    //char telephone[12]
infile.getline(adresse,40,';';);      //char adresse[40]
infile.getline(ville,30,';';);        //char ville[30]
infile.getline(codepostal,7,';';);    //char codepostal[7]  
infile.getline(province,3,';';);      //char province[3]  
infile.getline(datenaissance,7,';';); //char datenaissance[7]
infile.getline(no_carte,30,';';);     //char no_carte[30]
 
au début j'avais telephone à 11 mais si je ne le mais pas à 12
rien n'est mis dans adresse
le contenu qu'il devrait avoir va dans ville
 
quand je le met à 12 lorsque je list province, il y a rien
son contenu est mis dans datenaissance...
 
il y aussi un décalage..... il doit avoir quelques chose que j'ai pas compris là, c'est certain :)


---------------
Borland rulez: http://pages.infinit.net/borland
Reply

Sujets relatifs:

Leave a Replay

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