Récupérer une chaine dans un fichier texte

cs_alncool Messages postés 16 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 12 juillet 2005 - 12 mai 2004 à 14:54
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 12 mai 2004 à 22:47
En fait je dispose d'une classe avec trois attributs de type string. J'ai réalisé une surcharge de l'opérateur << pour pouvoir écrire dans un fichier texte le contenu de plusieurs objets (biensur avec une petite mise en forme dans le genre un séparateur tab entre les différents attributs et ensuite un retour chariot après le dernier attribut de chaque objet inscrit dans ce fichier texte. Mais voila le problème: j'ai codé une surcharge de l'opérateur>> pour pouvoir lire à partir du fichier et me constituer une liste d'objet mais le problème c'est que je ne sais pas comment il faut faire pour que les espaces des string soient considéré comme des séparateur de variable. Je sais pas si je me suis bien exprimé mais en gros si dans une variable string j'ai "Salut ca va?" alors "salut" est considéré comme étant l'attribut1, "ca" comme l'attribut2 et "va?" comme l'attribut3.
Merci d'avance. :)

Règle du bon codeur:
1) faire compliquer quand on peut faire simple
2) taper sur son PC quand ça ne marche pas
3) profiter de ses erreurs pour les recopiers dans un autre programme
4) je crois qu'avec tout ça t'arriveras un jour à faire quelque chose.

8 réponses

cs_alncool Messages postés 16 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 12 juillet 2005
12 mai 2004 à 14:56
Je rectifie :
je ne sais pas comment il faut faire pour que les espaces des string NE soient PAS considéré comme des séparateur de variable (mais plutôt la tabulation et le retour chariot).

Règle du bon codeur:
1) faire compliquer quand on peut faire simple
2) taper sur son PC quand ça ne marche pas
3) profiter de ses erreurs pour les recopiers dans un autre programme
4) je crois qu'avec tout ça t'arriveras un jour à faire quelque chose.
0
neohp Messages postés 62 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 14 octobre 2005
12 mai 2004 à 15:11
ben quand tu recupere uyne chaine, les espaces ne sont pas condirer comme des separateur...

donc si tu a "salut joe" c'est a toi de separer les different mots...

au passage y'a rien de plus simple....

un vieux for(...) avec une condition if( char[x] ==' ' ) ...etc

voila bonne prog

neoh_p [=- coding spirit -=]
------- since 1999 ------
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 mai 2004 à 20:26
"ben quand tu recupere uyne chaine, les espaces ne sont pas condirer comme des separateur..."

mystique ta phrase, ca depend comment on saisie la chaine
operateur >> => espace = separateur (ou alors regle les flags, skipws je crois)

getline => hop, toute la ligne

read => no coment
0
neohp Messages postés 62 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 14 octobre 2005
12 mai 2004 à 21:47
OUUUPPPSS

excusez moi, en effet j'ai mal lu le sujet dsl c'est de ma faute
en plus de sa, avec mes fautes de frappes....

j'avait pas caller que c t une surcharge d'operateur, je pensait qu'il avait crée un nouvelle operateur >> pour sa classe...

ceci dit , alncool , si tu creer un nouvel operatuer, tu pourra decomposer ta chaine comme tu veux ...

voila ++ tt le monde

neoh_p [=- coding spirit -=]
------- since 1999 ------
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
12 mai 2004 à 22:18
Ce que tu peux faire dans ton opérateur >>
lire une ligne complète dans une std::string
par std::getline( is, line );
qui va te lire toute la ligne contenant la description de ton objet.

Ensuite tu fais un std::istring_stream iss( line );
while( std::getline( iss, col, '\n' ) )
cout << '[' << col << ']' << endl;

qui va te lire tous les éléments de ta ligne en utilisant la tabulation comme séparateur de champ.

Ma participation à la saturation du net:
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 mai 2004 à 22:28
dans son autre topic (en double) je lui suggerai un

getline(file,str,'\t'); pour attraper les 2 premier attribut et getline(file,str) pour le 3e
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
12 mai 2004 à 22:42
Et ça ne lui plaisait ?

Par contre je préfère le while, car si tu ajoutes
un élément sur la ligne tu n'as rien à ajouter.

PS : J'ai pas du lire ta réponse sur le même sujet, je peux pas être partout ;)

Ma participation à la saturation du net:
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 mai 2004 à 22:47
c'est pas grave,
c'est juste pour dir a neohp qu'il vaut mieux eviter les topic en double
0
Rejoignez-nous