erreur sur stringstream surrement simple mais pas trouvée encore - C++ - Programmation
Marsh Posté le 18-12-2009 à 14:25:16
tu remplis iTemp[it] et non iTemp[i]
sinon:utilise boost::date_time y a ce qui faut pour faire ça de manière automatique
Marsh Posté le 18-12-2009 à 14:40:25
ReplyMarsh Posté le 18-12-2009 à 14:44:04
pourquoi recréer ton stream à chaque fois ?
Comme Joël l'a suggéré, mate du côté de boost, ils ont sans doute quelque chose pour t'éviter de te prendre la tête
Sinon, au moins, crée ton stream une bonne fois, tu alternes les lectures d'entier / caractère de séparation en vérifiant que les données que tu lis sont bien valides et basta, y'a même pas besoin de faire une boucle pour ca.
Marsh Posté le 18-12-2009 à 14:45:28
ReplyMarsh Posté le 18-12-2009 à 15:18:33
ok je vais chercher du coté de Boost (connais pas)
sinon mon stream est créé une seule fois avec
Code :
|
j'utilise juste myStream.str("" ); pour le vider.
pour la boucle, je m'en passais avant en faisant des lecture/ecriture avec mon stream l'une apres l'autre mais le résultat était le même.
bon je regarde du coté de boost mais j'aurai voulu comprendre pourquoi ça ne marche pas là.
Marsh Posté le 19-12-2009 à 23:26:57
quelque commentaire.....
Code :
|
c'est bizarre! myStream>>iTemp[it]; , je dois tester
ca quand je demarre linux
...pour maintenant je vois qui'il ya une function
deja definie (op override) pour array
.. alors si on met quelqu parethese , ou casting ?
Quand on a changer au std:: , cette function
n'est pas defini avec ce namespace ( ..je crois!)
myStream.str("" ); dans la loop , c'est du sport
Marsh Posté le 07-03-2010 à 23:12:23
__tomjost a écrit :
|
il veut dire operator overload !
for(int i=0;i<=15;i+=3)
{
str.assign(DateString.substr(i,2));
myStream<<str; //string to stringstream
cout<<str; //debug
myStream>>iTemp[it]; //stringstream to int
it++;
}
l'example est similair a un queue entre deux thread..
ici myStream herite de iostream , et le buffer est partatger
entre ostream , istream.
// myStream<<str;
on insert 2 chars -> le ptr egptr(end getptr) se deplace de 2
-> maintenant le buffer que voit istream et de 2 char ,
apres extraction , istream arrive a la fin , ios::eof bit est marquer(set)
et tout function qui suit 'fail' en silence apres.
1/ call myStream.clear(0) enleve le bit de eof (tout avec un 0 ) ,
et on continue normalement , mais dans ce cas l'allocation de memoire continue. (je ne sais pas si il y a une limite)
alors il faut ajouter myStream.seekp(0); myStream.seekg(0); , les curseurs
retourne au debut... , sans prendre plus de memoire.
2/ autre solution pour ne pas causer l'eof est myStream<<str<<endl;
istream ne prend(extract) pas '\n'... et pas d'eof (on met 3 on prend 2)
(mais toujours avec seekp(0) , seekg(0) pour la memoire )
3/ on peut aussi mettre le tout dans un try/catch et activer l'exception
'MyStream.exceptions(ios::eofbit)' pour l'eof , ... un exception a 'handler'
chaque fois eofbit est 'set' .
-> il'ya toujours autre solution pour eviter le tout.
moi j'ai souvent utiliser quelque printf()/sprintf() pour ca.
je sais que ce sujet est .... , mais j'ai trouver cette page dans
un dossier , (il n ya pas d'autre!), et je trouve quelque temps
pour voir le problem .
oui , je sais c'est un peu mal expliquer...
excusez moi pour tout derangement!
Marsh Posté le 18-12-2009 à 13:45:13
bonjour à tous, j'ai un soucis avec l'utilisation de string/stringstream et int.
je décode une date contenu dans une chaine de caractères du type "18/12/09 10:36:00"
sauf que mon algo ne marche que la premiere itération
le probleme c'est que la premiere valeur est juste pour iTemp et str ("18" )
mais les autres boucles ne marchent pas.
str prend bien les valeurs "12" "09" "10" "36" "00" mais iTemp reste à {18,0,0,0,0,0}
ça doit être tout bete mais je vois pas
merci pour le coup de main
---------------
Mes ventes vers Grenoble & Gresivaudan