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++/CLI Discussion :

Lire un fichier csv avec séparateur ";"


Sujet :

C++/CLI

  1. #1
    Invité
    Invité(e)
    Par défaut Lire un fichier csv avec séparateur ";"
    Bonjour,

    Je souhaiterais savoir comment lire un fichier csv avec séparateur ";".
    Car je voudrais renseigner une structure avec les informations lus dans un fichier.

    Ci-dessous le fichier dans lequel je veux importer mes données dans un structure :
    Societe;ClientSite;ClientCompta;Groupe;Fjuri;Nom;Enseigne;Adresse1;Adresse2;Cpost;Ville;Tel;Fax;Email;Siret;Affacturage

    Prendre en compte les champs vides afin de ne pas perturber ma structure :
    Societe;ClientSite;ClientCompta;;Fjuri;Nom;Enseigne;Adresse1;;Cpost;Ville;Tel;;Email;Siret;Affacturage

    Mais aussi comment récupérer ces infos et renvoyer ces valeurs dans ma structure ?
    Merci pour votre aide.

    Voici une ébauche de mon 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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    #include <iostream>
    #include <cstdlib>
    #include <string>
    #include <vector>
    #include <fstream>
    #include <sstream>
     
    using namespace std;
     
     
     
     struct Adresse {
    string Societe;
    string ClientSite;
    string ClientCompta;
    string Groupe;
    string Fjuri;
    string Nom;
    string Enseigne;
    string Adresse1;
    string Adresse2;
    string Cpost;
    string Ville;
    string Tel;
    string Fax;
    string Email;
    string Siret;
    string Affacturage ;
    };
     
    istream & operator >> (istream & stream, Adresse & Client)
               {
                getline(stream, Client.Societe, ';');
                getline(stream, Client.ClientSite, ';');
                getline(stream, Client.ClientCompta, ';');
                getline(stream, Client.Groupe, ';');
                getline(stream, Client.Fjuri, ';');
                getline(stream, Client.Nom, ';');
                getline(stream, Client.Enseigne, ';');
                getline(stream, Client.Client1, ';');
                getline(stream, Client.Client2, ';');
                getline(stream, Client.Cpost, ';');
                getline(stream, Client.Ville, ';');
                getline(stream, Client.Tel, ';');
                getline(stream, Client.Fax, ';');
                getline(stream, Client.Email, ';');
                getline(stream, Client.Siret, ';');
                getline(stream, Client.Affacturage);
                return stream;
                }
     
    ostream & operator << (ostream & stream, Adresse Client const & Client)
        {
            return stream
                << Client.Societe << " "
                << Client.ClientSite << " "
                << Client.ClientCompta << " "
                << Client.Groupe  <<  " "
                << Client.Fjuri << " "
                << Client.Nom << " "
                << Client.Enseigne << " "
                << Client.Client1 << " "
                << Client.Client2 << " "
                << Client.Cpost << " "
                << Client.Ville << " "
                << Client.Tel << " "
                << Client.Fax << " "
                << Client.Email << " "
                << Client.Siret << " "
                << Client.Affacturage;
        }
     
     
    void afficherListeAdresse()
    {
     
    string ligne; //Une variable pour stocker les lignes lues
     
     
    ifstream adresseClient("Adresseclients.csv");
        if(adresseClient)
        {
        //L'ouverture s'est bien passée, on peut donc lire
            while(getline(adresseClient, ligne)) //Tant qu'on n'est pas à la fin, on lit
            {
     Vector <Adresse> Client;
     Stream>>Client;
     
            }
     cout <<Client ;
        }
     
        else
        {
        cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl;
        }
     
        adresseClient.close(); //On referme le fichier
        //On ne peut plus écrire dans le fichier à partir d'ici
     
     
    }
     
    int main()
    {
     
    afficherListeAdresse();
     
        return 0;
    }
    Dernière modification par Invité ; 29/10/2015 à 14h09.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Votre aide s'il vous plait, suis vraiment coincé.

    Merci.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    En C++/CLI, le plus simple est de faire System::IO::File::ReadAllLines() sur le chemin du fichier, puis d'utiliser la méthode Split() de la classe System::String sur chaque ligne ainsi récupérée.

    Malheureusement, cette méthode a ses lacunes, car elle ne prend pas en compte les guillemets qui permettent d'avoir un point-virgule au sein d'une colonne; pour ça, tu devras probablement développer ton propre parseur, qui ignore les points-virgules quand il y a des guillemets, et ajoute chaque morceau de la chaîne dans une System::Collections::Generic::List<System::String^>...


    En C++ natif, il doit y avoir des méthodes similaires (std::vector<std::string>, toujours du parsing pour détecter les guillemets, etc.).

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 204
    Points : 12 370
    Points
    12 370
    Par défaut
    Google te donnera le code de parsers plus ou moins complexe pour la gestion des csv, c'est assez facile de convertir le code pour gérer le ";" à la place de ",".
    Le langage importe peu, car le principale, c'est l'algorithme.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour Bacelar,

    Je sus désolé mais j'ai beau chercher je ne trouve pas.
    A part des bouts de code par ci, par là.

    Et rien ne m explique comment faire pour transférer ces infos dans ma structure.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 204
    Points : 12 370
    Points
    12 370

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Le membre de dvp white_tentacle vient de publier un article qui semble être exactement ce qu'il te faut:
    Lecture CSV en C++, le faire « comme il faut »

  8. #8
    Invité
    Invité(e)
    Par défaut
    Merci a vous deux pour vos réponses.
    Je vais lire ces articles.

Discussions similaires

  1. Réponses: 11
    Dernier message: 07/10/2011, 10h19
  2. Lire fichier CSV avec tabulation comme séparation
    Par theNoob dans le forum Langage
    Réponses: 3
    Dernier message: 07/09/2009, 19h52
  3. Lire un fichier CSV envoyé avec une requête POST
    Par Marm B dans le forum Langage
    Réponses: 6
    Dernier message: 26/08/2009, 14h31
  4. [AC-2003] Lire un fichier CSV de 170Mo avec Access
    Par mmmxtina dans le forum VBA Access
    Réponses: 12
    Dernier message: 15/07/2009, 14h45
  5. Réponses: 12
    Dernier message: 12/04/2006, 11h20

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