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 : Sélectionner tout - Visualiser dans une fenêtre à part
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!