IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

csv dans tableau


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Mai 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mai 2004
    Messages : 69
    Par défaut csv dans tableau
    Bonjour,

    Voici mon problème. J'ai un fichier excel transformé en csv. Je le lis et souhaite mettre les différents éléments (texte entre les séparateurs) dans des éléments d'une structure d'un tableau.

    Début du fichier
    numéro;nom;prénom
    1;martin;jean
    2;dupont;pierre;
    3;martinotelli;paul

    Début du programme
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    #include <cstdlib>
    #include <iostream>
    #include <fstream> 
     
    #define DimPers 2000     // Définition du tableau de DimSequel Sequel 
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        ifstream file_I_Personnel ("personne.csv");
     
        struct personne {
          string numéro;
          string nom;
          string prénom;
        }
     
    typedef personne TabPers[DimPers];
     
        TabPers TPers;
     
        int Nb = 0;
     
        string line;
        while ( getline( file_I_Pers, line ) )
        {
          // boucle sur chaque caractère de la ligne pour déceler 
          // le séparateur (ici le point-virgule). 
          // Pouvez vous m'aider sur ce point.
     
     
          TPers.Numéro[Nb]= 
          TPers.Nom[Nb]= 
          TPers.Prenom[Nb]= 
     
          ++Nb;
        }   
    cout<<"Nombre de ligne"<<Nb<<endl;
    Est ce qu'il y a une méthode simple pour obtenir les différents éléments entre les séparateurs.

    Merci pour vos réponses.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    std::string possède les méthodes find et substr.
    Avec un algorithme comme ceci, tu devrais parvenir au résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    - trouver le premier ; (séparateur)
    - récupérer ce qui précède dans le numéro
    - trouver le 2° séparateur
    - récupérer ce qui est contenu entre les 2 séparateurs
    - récupérer ce qui suit le 2° séparateur
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    getline a une surcharge permettant de préciser un caractère de séparation à la place du '\n'. Tu peux t'en servir.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <sstream>
    #include <vector>
     
    int main()
    {
        std::ifstream file_I_Personnel ("personne.csv");
     
        struct personne {
          std::string numero;
          std::string nom;
          std::string prenom;
        };
     
        std::vector<personne> TPers;
        std::string line;
        while ( std::getline( file_I_Personnel, line ) )
        {
            personne p;
            std::istringstream iss(line);
            std::getline(iss,p.numero,';');
            std::getline(iss,p.nom,';');
            std::getline(iss,p.prenom,';');
            TPers.push_back(p);
        }
        std::cout<<"Nombre de ligne"<<TPers.size()<<std::endl;
        return 0;
    }

  4. #4
    Membre chevronné Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Par défaut
    @3DArchi tu me déçois, tu n'as pas déclaré une variable pour définir le séparateur, voila quelque chose qui n'est pas DRY (XP, Dont Repeat Yourself)
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <sstream>
    #include <vector>
     
    int main()
    {
        std::ifstream file_I_Personnel ("personne.csv");
     
        struct personne {
          std::string numero;
          std::string nom;
          std::string prenom;
        };
     
        std::vector<personne> TPers;
        std::string line;
        while ( std::getline( file_I_Personnel, line ) )
        {
            personne p;	
            const char separator = ';' ;
            std::istringstream iss(line);
            std::getline(iss,p.numero,separator);
            std::getline(iss,p.nom,separator);
            std::getline(iss,p.prenom,separator);
            TPers.push_back(p);
        }
        std::cout<<"Nombre de ligne"<<TPers.size()<<std::endl;
        return 0;
    }

  5. #5
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Mai 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mai 2004
    Messages : 69
    Par défaut
    Merci pour vos réponses.

    Une autre question :
    Je récupère une string d'un fichier et je recherche une valeur numérique sur 6 chiffres.
    Exemple :

    abcdef1234567 donne 123456 et 234567.

    J'ai récupéré ce bout de code sur le site
    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
    19
    20
     
    #include <sstream>  
     
    template<typename T>
    bool is_of_type( const std::string & Str )
    {
        // créer un flux à partir de la chaîne donnée
        std::istringstream iss( Str );
        // créer un objet temporaire pour la conversion
        T tmp;
        // tenter la conversion et
        // vérifier qu'il ne reste plus rien dans la chaîne
        return ( iss >> tmp ) && ( iss.eof() );
    }
     
    int main()
    {
        is_of_type<float>( "10.5" ); // vrai
        is_of_type<int>( "10.5" ); // faux grâce au 2° test
    }

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Citation Envoyé par themadmax Voir le message
    @3DArchi tu me déçois, (...) voila quelque chose qui n'est pas DRY
    Pour un peu tu me traite d'alcoolique

    Citation Envoyé par rico3434 Voir le message
    Merci pour vos réponses.

    Une autre question :
    Je récupère une string d'un fichier et je recherche une valeur numérique sur 6 chiffres.
    Exemple :

    abcdef1234567 donne 123456 et 234567.

    J'ai récupéré ce bout de code sur le site
    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
    19
    20
     
    #include <sstream>  
     
    template<typename T>
    bool is_of_type( const std::string & Str )
    {
        // créer un flux à partir de la chaîne donnée
        std::istringstream iss( Str );
        // créer un objet temporaire pour la conversion
        T tmp;
        // tenter la conversion et
        // vérifier qu'il ne reste plus rien dans la chaîne
        return ( iss >> tmp ) && ( iss.eof() );
    }
     
    int main()
    {
        is_of_type<float>( "10.5" ); // vrai
        is_of_type<int>( "10.5" ); // faux grâce au 2° test
    }
    Et ?

Discussions similaires

  1. Parser fichier csv dans tableau
    Par djdmd dans le forum VBScript
    Réponses: 1
    Dernier message: 22/11/2012, 16h40
  2. charger ligne fichier csv dans tableau C
    Par nhella22 dans le forum Débuter
    Réponses: 6
    Dernier message: 21/04/2011, 20h28
  3. récupère contenu csv dans tableau
    Par sverdo dans le forum wxPython
    Réponses: 3
    Dernier message: 15/02/2010, 17h57
  4. csv dans tableau
    Par sverdo dans le forum Tkinter
    Réponses: 2
    Dernier message: 11/02/2010, 16h21
  5. Mettre un fichier csv dans un tableau à deux dimensions
    Par neeux dans le forum Général Python
    Réponses: 5
    Dernier message: 05/03/2007, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo