eupeup
Messages postés57Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention24 avril 2013
-
24 avril 2013 à 16:16
eupeup
Messages postés57Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention24 avril 2013
-
24 avril 2013 à 20:07
Hello,
j'ai une petite question au sujet d'une lecture de fichier.
Je parse mon fichier de la manière suivante (en gros)
Le fichier que je parse est un fichier plat avec 3 champs par ligne. Les deux premiers sont des string et le troisième est un double.
L'idée est de la injecter dans deux vecteurs de string et un vecteur de double pour le troisième élément.
Ma question porte sur le cast en double via un stringstream... Est ce convenable comme j'ai fait ? je trouve l'écriture particulièrement lourde...
Qu'en pensez vous ?
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 24 avril 2013 à 19:31
Bonjour.
Pense à utiliser les balises de code la prochaine fois, merci :)
J'écrirais simplement:
std::ifstream fichier(_filePath.c_str());
std::string arg1; // Trouver des noms de variables plus explcite :p
std::string arg2;
double arg3;
if (!fichier)
{
std::cerr << "Can't read file: " << fichier << std::endl;
return 1;
}
// Traiter ici les éventuelles header du fichier à lire
// Lecture des 3 champs, et ajout dans les tableaux.
while (fichier >> arg1 >> arg2 >> arg3)
{
_firstFactorNames.push_back(arg1);
_secondFactorNames.push_back(arg2);
_correlValues.push_back(arg3);
}
Quelques petits conseils:
- std::ios::in est inutile puisque tu as un std::ifstream (c'est un std::fstream en mode std::ios::in)
- iter++ => ++iter. Attention, dans le cas d'un "iterator" (c'est une classe), ++iter est bien plus rapide que iter++. En effet, ++iter incrémente "iter", mais iter++ copie "iter" l'incrémente de 1 puis le réassigne à "iter".
- La manière dont tu fais la conversion de string vers double est la bonne. L'écriture est un peu lourde, mais c'est bel et bien comme cela qu'il faut faire.
- iter!=parsedFile.end() => met parsedFile.end() dans une variable, sinon tu rappelles la fonction à chaque tour de boucle.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
eupeup
Messages postés57Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention24 avril 2013 24 avril 2013 à 20:07
Salut CptPingu,
désolé pour les balises
Ben je vais te dire merci, car tes explications sont très claires, et j'apprécie beaucoup les conseils tels que tu les as proposés... très pédagogique.
Ton implémentation est quand même bien plus "lisible" que la mienne, ca me plait bien :)