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 :

[libcsv] Lire un fichier CSV


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Points : 5
    Points
    5
    Par défaut [libcsv] Lire un fichier CSV
    Bonjour à tous, je vous explique mon soucis je débute en C et je dois extraire les données d'un fichier csv et les stocker dans un tableau pour ensuite traiter ces données. Sur les conseils de plusieurs personnes je me suis tourné vers la librairie "libcsv" mais je ne comprend pas trop son fonctionnement j'ai seulement réussi à faire ceci :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <csv.h>
     
    struct counts {
        long unsigned fields;
        long unsigned rows;
    };
     
     
    void cb1 (void *s, size_t len, void *data) {
        ((struct counts *)data)->fields++; }
    void cb2 (int c, void *data) {
        ((struct counts *)data)->rows++; }
     
     
    int main(){
        void *a;
        void *b;
        FILE *fp;
        struct csv_parser p;
        char buf[1024];
        char dest[1024];
        size_t bytes_read;
        struct counts c = {0, 0};
        if (csv_init(&p, 0) != 0) exit(EXIT_FAILURE);
        fp = fopen("releve_bancaire.csv", "r");
        if (!fp) exit(EXIT_FAILURE);
     
            while ((bytes_read=fread(buf, 1, 1024, fp)) > 0){
                if (csv_parse(&p, buf, bytes_read, cb1, cb2, &c) != bytes_read) {
                    fprintf(stderr, "Error while parsing file: %s\n",
                    csv_strerror(csv_error(&p)) );
                    exit(EXIT_FAILURE);
                }
     
                csv_fini(&p, cb1, cb2, &c);
                csv_write(dest,1024,buf,1024)
     
                fclose(fp);
                printf("%lu fields, %lu rows\n", c.fields, c.rows);
     
                csv_free(&p);
                exit(EXIT_SUCCESS);
            }
     
    }
    qui affiche le nombre de case dans le tableau. Si quelqu'un pouvait me donner la fonction permettant de stocker les données dans un tableau je lui en serai reconnaissant. (j'ai déjà fait man csv je me doute qu'il s'agit de la fonction csv_write mais je ne comprend pas les arguments)

    Cordialement, un noob !

  2. #2
    Membre expérimenté Avatar de Ngork
    Homme Profil pro
    Barbare IT
    Inscrit en
    Avril 2009
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Barbare IT
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 160
    Points : 1 372
    Points
    1 372
    Par défaut
    Il y a ici un très bon tutoriel sur la lecture de fichiers CSV : http://julien-blanc.developpez.com/t...cture-csv-c++/
    L'archive des codes du tutoriel comporte aussi trois exemples d'utilisation de la bibliothèque libcsv.

    Pour répondre plus directement à ta question, la fonction csv_write ne te permet pas de stocker les données d'un fichier CSV dans un tableau mais exactement le contraire, soit formatter des données pour une sortie en CSV.
    Pour créer une représentation en mémoire de tes données CSV, il faut dans ton exemple modifier les fonctions de rappel cb1 (appelé pour chaque champ lu) et cb2 (appelé pour chaque enregistrement complet lu) qui ne font actuellement que compter les champs et les enregistrements, afin de stocker les données dans une structure de ton choix.

Discussions similaires

  1. Lire un fichier .csv sous unix
    Par bslota dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 21/11/2007, 17h41
  2. Ouvrir et lire un fichier .csv
    Par Art19 dans le forum Composants VCL
    Réponses: 20
    Dernier message: 12/08/2007, 23h18
  3. Lire un fichier CSV ou XLS de la même manière
    Par Linio dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/07/2007, 15h12
  4. Réponses: 12
    Dernier message: 12/04/2006, 10h20
  5. Lire un fichier CSV/XLS
    Par Doneve dans le forum ASP
    Réponses: 3
    Dernier message: 04/10/2005, 17h34

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