Recherche d'un string dans un vector<string>
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 :
Code:
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);
}
}
} |
Ensuite, l'idée est de rechercher un string nom contenue dans un élément de mon vecCSV.
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 :
Code:
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++ )];
}
} |
Si quelqu'un avait des pistes pour m'aiguiller, je suis preneur !
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:
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;
} |