je sais pas lire dans un fichier ... [C++] - Programmation
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...
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;
Marsh Posté le 28-05-2001 à 11:51:49
std:: string ?? ca marche pas quand je fais
std::string c;
file >> c;
:-(
Marsh Posté le 28-05-2001 à 11:52:22
minusplus> exact. j'avais pas vu que ses donnees etaient organisees.
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 ??
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
////////////////////////////////
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>.
En tout cas, la solution de minusplus me plaît en effet elle a marchée dans mon pb. Alors pourquoi dans le tien !
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>. 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 ....
Marsh Posté le 28-05-2001 à 13:30:42
Oui mais t'es sous Visual C++ j'imagine...
alors #include <cstring> je crois
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
Marsh Posté le 28-05-2001 à 13:38:41
Et si au lieu de declarer 'string s', tu declares 'cstring s' ?
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 !
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)
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 :-)