[C++] je sais pas lire dans un fichier ...

je sais pas lire dans un fichier ... [C++] - Programmation

Marsh Posté le 28-05-2001 à 11:36:38    

le fichier est du genre :
 
ZEF 14 SD 24 QSDFQSDF 45
SDD 45 sd 46 SDSDSDSD 78
 
je dois recuperer a la fois les strings et les nombres.
avant je faisais juste 'file >> nb'.
maintenant, je sais plus faire...car '>>' 'saute' les espaces
si qlq un a une petite idee please :-)

Reply

Marsh Posté le 28-05-2001 à 11:36:38   

Reply

Marsh Posté le 28-05-2001 à 11:49:10    

file >> string1 >> nb1 >> string2 >> nb2 >> string3 >> ...
 
etc...
 
il va te récupérer :
string1 : "ZEF"
nb1 : 14
string2 : "SD"
nb2 : 24
string3 : "QSDFQSDF"
 
etc...

Reply

Marsh Posté le 28-05-2001 à 11:51:21    

Ton probleme c'est de separer les nombres des strings ?
 
ifstream f("file" );
if (f==NULL) ...
 
while (! f.eof())
{
  string s;
  f >> s;
 
  if ((s.c_str()[0])>='0') && (s.c_str()[0])<='9')) // nombre
    TraiteNombre(atoi(s.c_str());
  else
    TraiteString(s);
}
 
avec  
void TraiteNombre(int i);
void TraiteString(string s);
 
Je suis d'accord que le 'atoi' c'est du C, pas du C++. A la rigueur il faudrait utiliser un strstream a la place.
Un truc du genre :  
 
strstream in(s);
int nombre;
s >> a;

Reply

Marsh Posté le 28-05-2001 à 11:51:49    

std:: string ?? ca marche pas quand je fais
 
std::string c;
file >> c;
 
:-(

Reply

Marsh Posté le 28-05-2001 à 11:52:22    

minusplus> exact. j'avais pas vu que ses donnees etaient organisees.

Reply

Marsh Posté le 28-05-2001 à 13:07:51    

pb... :
/////////
string c;
/////////
 =>
error C2065: 'string' : undeclared identifier
 
et  
///////////
std::string c;
file >> c;
///////////
 =>  
no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or  
there is no acceptable conversion)
 
 
Ahhh, comment je defini une string moi ??

Reply

Marsh Posté le 28-05-2001 à 13:13:35    

ton code en entier, c'est quoi ?

Reply

Marsh Posté le 28-05-2001 à 13:19:25    

ifstream file0("../../Data/R21/res_21.nod.txt" );
if (!file0) {cout << " erreur ouverture "; int f; cin >> f;}  
// ici pas de pb, le fichier est bien ouvert
std::string c;
file0 >> c ;
cout <<c;
////////////////////////////////
 
et le ficher q lire :
1 seule ligne, et ya ecrit :
PARIS
////////////////////////////////

Reply

Marsh Posté le 28-05-2001 à 13:21:35    

J'espère que tu n'as pas oublié de mettre l'en-tête #include <string>. :sarcastic:  
En tout cas, la solution de minusplus me plaît en effet elle a marchée dans mon pb. Alors pourquoi dans le tien ! :)

Reply

Marsh Posté le 28-05-2001 à 13:26:11    

DuffBeer a écrit a écrit :

J'espère que tu n'as pas oublié de mettre l'en-tête #include <string>. :sarcastic:  
En tout cas, la solution de minusplus me plaît en effet elle a marchée dans mon pb. Alors pourquoi dans le tien ! :)




 
le pb etait la : j'utilisais pas le bon string.
donc maintenant :
j'ai mis #include <string>.
j'ecris 'string c;'
et a la compile : error C2065: 'string' : undeclared identifier
 
j'en ai un peu marre la ....

Reply

Marsh Posté le 28-05-2001 à 13:26:11   

Reply

Marsh Posté le 28-05-2001 à 13:30:42    

Oui mais t'es sous Visual C++ j'imagine...
 
alors #include <cstring> je crois

Reply

Marsh Posté le 28-05-2001 à 13:34:47    

je suis effectivement sous visual. j'ai cherche le seul fichier string.h sur mon disque dur, et ya que des define, pas de definition de classes, rien.
j'ai mis <cstring> et ca change pas le ms d'erreur de mon post precedent :(

Reply

Marsh Posté le 28-05-2001 à 13:38:41    

Et si au lieu de declarer 'string s', tu declares 'cstring s' ?

Reply

Marsh Posté le 28-05-2001 à 13:45:13    

tgrx a écrit a écrit :

Et si au lieu de declarer 'string s', tu declares 'cstring s' ?




 
t'as faillis me faire peur, mais...perdu, meme message d'erreur !!! :)
LAISSEZ tomber, j'ai trouve une autre solution :
char toto[3];
file >> toto;
 
et ca marhce. je vais pas vous faire perdre plus de temps. En plus ca marche chez Duffbeer, donc le pb est sans doute lus complexe, et je vous ai pas assez donne d'explication.
 
en tt cas merci a vous !

Reply

Marsh Posté le 28-05-2001 à 14:39:13    

ATTENTION ! <cstring> inclue la librarie C "string.h" qui ne contient évidemment pas la classe C++ 'string' !
 
Si vous voulez utiliser la classe 'string', il faut inclure <string> !
 
(string.h contient tous les utilitaires de gestion des tableaux AZT qui constituent les 'chaînes' du C)

Reply

Sujets relatifs:

Leave a Replay

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