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...
Quelqu'un aurait-il une idée?
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)! } } }
Merci!
Partager