Conversion de string en double
Bonjour,
Je cherche à lire un csv contenant des valeurs numériques.
Je convertis les nombres de string à double avec un istringstream.
Dans l'exemple minimal ci-dessous, la première valeur de mon csv est bien convertie, mais les suivantes gardent la première valeur.
Je ne vois vraiment pas pourquoi...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
#include <boost/tokenizer.hpp>
#include <sstream>
int main()
{
using namespace std;
using namespace boost;
string data("chemin/Data.csv");
/*
Le fichier data contient simplement:
0.1,0.2
0.3,0.4
*/
ifstream in(data.c_str());
if (!in.is_open()) return 1;
double d;
string texte;
istringstream stm;
typedef tokenizer< escaped_list_separator<char> > Tokenizer;
vector< string > vec;
vector< string >::iterator it;
string line;
while (getline(in,line))
{
Tokenizer tok(line);
vec.assign(tok.begin(),tok.end());
it=vec.begin();
// Pour chaque élément de la ligne du csv:
for (it=vec.begin(); it!=vec.end(); ++it)
{
cout << *it << endl; // Là, le texte s'affiche bien (on voit la bonne valeur)
texte=*it;
stm.str(texte);
stm >> d;
cout << d << endl; // Là, le texte est toujours "0.1" (la première valeur du csv)!
}
}
} |
Quelqu'un aurait-il une idée?
Merci!