Problème vecteurs

Résolu/Fermé
Debutant en webmastering Messages postés 401 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2021 - Modifié le 27 juin 2017 à 13:37
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 27 juin 2017 à 15:31
Bonjour,

j'essaie de récupérer des données depuis un CSV et de les stocker dans des objets afin de pouvoir effectuer des changements de type et des calculs mathématiques dessus.
Malheureusement sans succès ; le problème que je rencontre c'est que je ne connais pas le nombre de lignes de mon CSV du coup en recherchant sur différents forums je suis tombé sur la solution de WhiZTiM qui propose une récupération de la manière suivante

std::ifstream csv("test.csv");
std::vector <std::vector<std::string>> items;

if (csv.is_open()) {
        for (std::string row_line; std::getline(csv, row_line);)
        {
//si je ne me trompe pas, ça simule une fin de ligne
            items.emplace_back();
            std::istringstream row_stream(row_line); 
 //récupère chaque élément dans column
            for(std::string column; std::getline(row_stream, column, ',');)
//place la valeur à la fin de mon vecteur
                items.back().push_back(column);
        }
}
else {
    cout << "Unable to open file";
}

le problème c'est qu'étant dynamique je ne sais pas interagir avec mon vecteur pour récupérer les valeurs
(je ne connais que .at(indice) http://www.cplusplus.com/reference/vector/vector/at/



Cordialement,  Debutant en webmastering

2 réponses

Debutant en webmastering Messages postés 401 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2021
27 juin 2017 à 13:38
solution : ça fonctionne comme les matrices ... - std::cout<<items[x][y]; ...
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
27 juin 2017 à 15:31
Bonjour

items.emplace_back() sert à créer une ligne de plus dans items et items.back() permet de référencer la ligne de plus qui vient d'être créée.

Qu'entends tu par problème pour récupérer les valeurs?
// Pour accéder à un élément
items.at( i_ligne ).at( i_colonne );
items[ i_ligne ][ i_colonne ];   // ou
items.back().back(); // le dernier élément de la dernière ligne
items[0][0]  <===>  items.front().front()

// pour connaitre le nombre de lignes
items.size()

// pour connaitre le nombre de colonnes d'une ligne donnée
items[ i_ligne ].size();
0