Bonjour,
je débute en c++ et je dois écrire un algorithme qui traite des fichiers csv et sauvegarde les données dans un tableau.
J'ai écrit un premier code qui à l'air de fonctionner (il récupère correctement les données et les cases du tableau sont remplies correctement).
Je vous le met en copie (si vous avez diverses remarques pour améliorer le truc, je suis preneur ! )
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 #include <iostream> #include <sstream> #include <fstream> #include <vector> #include <string> using namespace std; // Programme calculant le nombre de ligne du fichier int tailleFichier (string chemin) { string line; ifstream fichierSource (chemin.c_str()); int taille (0); while ( !fichierSource.eof() ) { fichierSource >> line; ++taille; } fichierSource.close(); return taille; } int main () { int const tailleInfluenceL=tailleFichier("influence.csv"); string sourceI; ifstream fichierSourceInfluence ("influence.csv"); //ouverture du fichier getline (fichierSourceInfluence, sourceI); vector <double> tableauInfluence; istringstream ligneI(sourceI); string nombreStringI; getline (ligneI, nombreStringI, ';'); //récupération du premier terme inutile while (getline (ligneI, nombreStringI, ';')) // récupération des termes utiles { double nombreI(0); istringstream issI(nombreStringI); issI >> nombreI; tableauInfluence.push_back(nombreI); } fichierSourceInfluence.close(); // fermeture du fichier int const c=tableauInfluence.size(); int const tailleInfluencel=c/tailleInfluenceL; cout << "ok////"<<tailleInfluencel ; // affichage test return 0; }
Cependant, lorsque j'ai par exemple deux fichiers différents à lire, mon code ne fonctionne plus. Le voici (c'est le même sauf que j'ai ajouté le traitement d'un deuxième fichier):
Le programme ne va pas jusqu'au bout et ne m'affiche rien. Du coup je me demandais si j'avais fait une erreur grossière de conception en c++ ou c'est tout autre chose.
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 #include <iostream> #include <sstream> #include <fstream> #include <vector> #include <string> using namespace std; //Programme calculant le nombre de ligne du fichier int tailleFichier (string chemin) { string line; ifstream fichierSource (chemin.c_str()); int taille (0); while ( !fichierSource.eof() ) { fichierSource >> line; ++taille; } fichierSource.close(); return taille; } int main () { //Fichier véhicule int tailleVehiculeL=tailleFichier("file.csv"); string sourceV; ifstream fichierSourceVehicule ("file.csv"); getline (fichierSourceVehicule, sourceV); vector <double> tableauVehicule; istringstream ligneV(sourceV); string nombreStringV; getline (ligneV, nombreStringV, ';'); while (getline (ligneV, nombreStringV, ';')) { double nombreV(0); istringstream issV(nombreStringV); issV >> nombreV; tableauVehicule.push_back(nombreV); } fichierSourceVehicule.close(); int const b=tableauVehicule.size(); int tailleVehiculel=b/tailleVehiculeL; cout <<"ok"<<"//"<<tailleVehiculel; //affichage test // fichier influence int tailleInfluenceL=tailleFichier("influence.csv"); string sourceI; ifstream fichierSourceInfluence ("influence.csv"); getline (fichierSourceInfluence, sourceI); vector <double> tableauInfluence; istringstream ligneI(sourceI); string nombreStringI; getline (ligneI, nombreStringI, ';'); while (getline (ligneI, nombreStringI, ';')) { double nombreI(0); istringstream issI(nombreStringI); issI >> nombreI; tableauInfluence.push_back(nombreI); } fichierSourceInfluence.close(); int const c=tableauInfluence.size(); int const tailleInfluencel=c/tailleInfluenceL; cout << "ok////"<< tailleInfluencel; //affichage test return 0; }
Je ne sais pas si cela sert mais j'utilise xCode 4.3.2 sous Mac OS X 10.7.3.
Et au niveau de la taille des fichiers: le fichier file.csv est un fichier de 21 colonnes et d'environ 750 lignes et le fichier influence.csv est un fichier de 3 colonnes et d'une dizaine de lignes.
Partager