Bonjour à tous !
Je bloque sur une partie de mon code.
Je m'explique : J'ai un fichier CSV que je copie dans un vector<string> via le code suivant :
Ensuite, l'idée est de rechercher un string nom contenue dans un élément de mon vecCSV.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void extractionCSV (ifstream& fichComp,vector<string>& vecCSV) { string ligneCourante(""); if(fichComp) { fichComp.seekg(0,ios::beg);//on se place au début du fichier while (getline(fichComp,ligneCourante)) { vecCSV.push_back(ligneCourante); } } }
Par exemple, si
nom="toto",
et que
vecCSV[0] = "tot1"
vecCSV[1] = "tot2"
vecCSV[2] = "le toto est à l'eau"
vecCSV[3] = "tot6"
etc...
Alors, je veux pouvoir récupérer vecCSV[2].
Je n'ai pas réussi à y parvenir, j'ai essayé avec std::find, mais il ne me renvoie rien (il me semble que find fait simplement une comparaison de type if(nom == vecCSV[i])).
J'ai le bout de code suivant, qui ne marche donc pas :
Si quelqu'un avait des pistes pour m'aiguiller, 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 string rechercheLigneComp(string nom, std::vector<std::string> vecCSV) { std::vector< std::string >::iterator it = vecCSV.begin(); for( ; ; ) { it = std::find(it, vecCSV.end(), nom); if ( it == vecCSV.end() ) return ""; else return vecCSV[std::distance( vecCSV.begin(), it++ )]; } }
Je précise par ailleurs que je dois effectuer la recherche de "nom" plusieurs centaines de fois. J'ai testé de rechercher "nom" directement dans le CSV (code ci-dessous), ça fonctionne bien mais la recherche est bien trop longue, c'est pourquoi je tente cette 2nde méthode.
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 string rechercheLigneComp(string nom, ifstream& fichComp) { string ligneCourante(""), ligneSortie(""); if(fichComp) { fichComp.seekg(0,ios::beg);//on se place au début du fichier while (getline(fichComp,ligneCourante)) { if(ligneCourante.find(nom) != std::string::npos) { ligneSortie=ligneCourante; break; } } } return ligneSortie; }
Partager