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 :

lecture fichier csv


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Par défaut lecture fichier csv
    Bonjour,

    J'ai un soucis pour la lecture d'un fichier csv. Je lis un ensemble de données dont des chaines de caractères mais le problème est que celles-ci peuvent contenir des point-virgule. Jusqu'à maintenant, je lisais le fichier avec la fonction getline en utilisant le point-virgule comme caractère de séparation mais du coup ça ne fonctionne pas si certaines chaines en contiennent.

    Je pensais mettre ces chaines entre guillemets pour différentier les données des séparateurs mais comment doit-je lire alors le fichier en C++ pour récupérer ce qu'il y a à l'intérieur des guillemets?

    Merci d'avance

  2. #2
    Invité de passage
    Profil pro
    Inscrit en
    Août 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 1
    Par défaut
    la fonction getline est à éviter... il vaut mieux que tu sépare tes élèments manuellement en lisant caractères par caractères (fread en c ou getc (un truc comme sa) et tu coupe les chaines si tu tombe sur ; ou '\n'

    ex:

    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
     
    #include <vector>
    #include <string>
    #include <cstdio>
    FILE* file = fopen("name");
    std::vector<std::string> strs;
    std::string cur_str;
    char current;
    while (fread(&current,1,1,file))
    {
       if (current == '\n' || current == ';')
       {
            strs.push_back(cur_str);
            cur_str = "";
       }
       else
           cur_str += current;
     
    }

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    J'ai deja vu des bibliotheques proposant des parseurs CSV. Je chercherais a en utiliser une (desole, j'ai pas de recommandation) avant d'ecrire la mienne: le format CSV etant plus un peu complexe que ce qu'on peut penser - sans parler de l'existence de variantes -, les choses trop simples finissent toujours par poser des problemes.

    Si tu dois le faire a la main, il va te falloir lire caractere par caractere, en utilisant istream::get ou streambuf::{sgetc,snextc,sbumpc}.

  4. #4
    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 : 38
    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,

    Pourquoi ne pas tout simplement changer de délimiteur ? csv ne le permet plus (pas) ?
    J'ai eu un cas similaire il y a 3 ans, ce fut la solution retenue pour notre part.

    Dans le cas où tu réécris toi-même un parser (sigh), oui tu peux bluffer en encadrant ta chaîne de "", avec un simple flag qui indique si oui ou non tu es dans une chaîne et traiter un éventuel ;
    Mais c'est bien dommage de réinventer une roue aussi basique et que nombre de personne ont déjà éprouvé.
    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.

Discussions similaires

  1. lecture fichier CSV
    Par kodshadow dans le forum Débuter
    Réponses: 6
    Dernier message: 22/12/2008, 16h42
  2. [MySQL] Lecture fichier CSV et enregistrement dans la base
    Par tifsa dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 26/09/2008, 12h49
  3. Lecture fichier .csv par colonne
    Par BRAUKRIS dans le forum Langage
    Réponses: 3
    Dernier message: 05/10/2007, 14h08
  4. Lecture fichier CSV
    Par Iphelias dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 14/06/2007, 21h58
  5. lecture fichier .csv
    Par wiss20000 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/06/2007, 20h48

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