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 vers matrice


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2013
    Messages : 7
    Par défaut Lecture fichier csv vers matrice
    Bonjour tous le monde,
    svp j'ai besoin de votre aide sur ce petit problème sur code blocks. Je vous remercie d'avance sur tous vos réponses.
    voila, j'ai un fichier Excel (.csv), il contient 40 cellules ligne et 20 cellules colonnes. (la 1ere cellule ligne c'est les en-têtes du fichier et les autres sont des doubles).
    j'aimerai récupérer ces données dans une matrice 40X20, que j'utiliserai par la suite dans mon projet comme matrice de données.
    j'ai fait un petit programme C++ pour lire ce fichier et récupérer la matrice MAIS lors de l'exécution le programme me récupère une matrice 40x20 mais pleine des ZEROS. et M'indique que dataMatrix.exe a cessé de fonctionner sachant que dataMatrix c'est le nom 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
    #include <stdlib.h>
    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <vector>
    #include <cstdio>
    #include <string.h>
     
    using namespace std;
     
     
    // OBTAIN THE NUMBER OF LINES OF MY FILE.
    int matrix_lines(istream &iFile)
    {
        iFile.clear();
        iFile.seekg(0);
        int lines = 0;
        string line;
        while(!iFile.eof())
            {
            getline (iFile, line);
            lines++;
            }
        cout << "NUMBER OF LINES: " << lines-1 << endl;
        return lines-1;
    }
     
    // OBTAIN THE NUMBER OF COLS OF MY FILE.
     
    int matrix_cols(istream &iFile)
    {
        iFile.clear();
        iFile.seekg(0);
     
        string line;
        int cols =0;
        int count =0;
     
        getline (iFile, line);
        char ligne [255];
        strcpy (ligne, line.c_str());
     
        for (int i=0; i< strlen (ligne); i++)
            if (ligne [i] ==';')
            count++;
            cols=count+1;
     
     
        cout << "NUMBER OF COLS : " << cols << endl;
        return cols;
    }
     
    // READ MATRIX
    vector<vector<double> > matrix_read(istream &iFile, int lines, int cols)
    {
        vector<vector<double> > matrix;
        matrix.resize(cols);
        for(int i = 0; i < cols; i++)
            matrix[i].resize(lines);
     
        double value;
        iFile.clear();
        iFile.seekg(0);
        string line;
     
        for(int i = 0; i < lines; i++)
            {
            for(int j = 0; j < cols; j++)
            {
               matrix[i][j] = (iFile>>value,value);
               cout << matrix[i][j] << " ";
     
            }
            cout << "\n" << endl;
            }
            return matrix;
    }
     
    int main()
    {
        int lines,cols;
        ifstream iFile;
        iFile.open("C:/Users/Desktop/data.csv");
     
        if(!iFile) { // FILE COULDN'T BE OPENED
            cerr << "Error: FILE COULD NOT BE OPENED" << endl;
            exit(1);
                   }
     
        cols = matrix_cols(iFile);
        lines = matrix_lines(iFile);
     
    //    vector<vector<double> > matrix;
    //    matrix.resize(cols);
    //    for(int i = 0; i < cols; i++)
    //   matrix[i].resize(lines);
     
        matrix_read(iFile, lines, cols);
     
        iFile.close();
     
        return (EXIT_SUCCESS);
    }
    Merci d'avance pour votre aide

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

    Citation Envoyé par farimans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(!iFile.eof()) { 
        getline (iFile, line); 
        lines++; 
    }
    Attention à l'utilisation de eof(), je t'invite à lire ce sujet de la FAQ.
    Citation Envoyé par farimans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        getline (iFile, line);
        char ligne [255];
        strcpy (ligne, line.c_str());
     
        for (int i=0; i< strlen (ligne); i++)
            if (ligne [i] ==';')
                count++;
        cols=count+1; // attention à l'indentation trompeuse
    Inutile de passer par un tableau de char, tu peux directement faire line[i] et line.size().

    Pour ton problème durant l'exécution,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       vector<vector<double> > matrix;
       matrix.resize(cols);
       for(int i = 0; i < cols; i++)
           matrix[i].resize(lines);
    (qui peut se simplifier en vector< vector<double> > matrix(cols, std::vector<double>(lines));)
    crée une matrice de taille cols x lines et non l'inverse lines x cols. Tu as inversé ligne/colonne dans tes boucles for imbriquées.

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2013
    Messages : 7
    Par défaut
    merci Winjerome pour ta réponse,
    le problème d'exécution est réglé, t'as raison, j'ai inversé les lignes et les colonnes, mais il me reste le problème que la matrice récupéré est pleine des ZEROS au lieu des données de mon fichier excel.
    sincèrement je vois pas ou le problème, ça peut être le fichier.csv??? ou au niveau de code de récupération de la matrice??
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    matrix[i][j] = (iFile>>value,value);
               cout << matrix[i][j] << " ";

    quelqu'un parmi vous, svp vois le problème, sachant que j'ai essayé d'autre format de fichier, et d'autre codes!! vraiment je suis bloqué à ce niveau

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu oublies que le fichier est aussi composé de caractères « ; » qui séparent les données double, caractères qu'il faut aussi lire

  5. #5
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2013
    Messages : 7
    Par défaut
    ah c'est vrai, merci beaucoup Winjerome,je dois lire aussi le caractère ";", je vais voir ça, merciii

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture fichier .csv
    Par wiss20000 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/06/2007, 20h48
  2. [CSV] Fichier CSV vers phpMyAdmin
    Par DrOOMMgba dans le forum Langage
    Réponses: 6
    Dernier message: 28/04/2007, 14h09
  3. Réponses: 12
    Dernier message: 07/12/2005, 18h42
  4. [Conseil] Import de fichier CSV vers MySQL
    Par ShinJava dans le forum JDBC
    Réponses: 6
    Dernier message: 15/03/2005, 19h14
  5. Importation de fichier CSV vers une base Interbase
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 15/03/2005, 15h18

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