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 : 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);
		}
	}
}
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 : 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++ )];
	}
}
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 : 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;
}