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 :

transformer un fichier csv en une matrice


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2020
    Messages : 12
    Points : 15
    Points
    15
    Par défaut transformer un fichier csv en une matrice
    Bonjour;
    je suis nouveau sur ce forum et débutant en programmation c++;
    je veux lire un fichier csv qui contient des valeurs de type entier et par la suite calculer la somme de toute les valeurs du fichier;
    j'ai fait plusieurs test pour arriver à ce code mais il m'affiche des résultats faux;
    j'ai besoin d'une aide pour avancer dans mon code.

    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
    #include <string>
    #include <sstream>
    #include <stdlib.h>
    #include <iostream>
    #include <vector>
    #include <cstdio>
    #include <string.h>
    #include <cstdlib>
    #include <fstream>
     using namespace std;
    int main()
    {
     
     int a=0;
     
     
        ifstream filename("C:/Users/click/Desktop/exemple.csv"); // open the file
        string line;
        //field;
        vector< vector<int> > array;  // the 2D array
        vector<int> v;                // array of values for one line only
     
        if (!filename) // error if the file doesn't exist
      {
        cerr << "Can't open file " << filename << endl;
        return 1;
      }
       istringstream ss (line);
        while ( getline(filename,line) )    // get next line in file
        {
              //cout<<line<<endl;
            v.clear();
            string word;
            stringstream ss(line);
     
     
            while (getline(ss,word,';'))  // break line into comma delimitted fields
            {
                  int value=strtod(word.c_str(),NULL);
                v.push_back(value);  // add each field to the 1D array
                array.push_back(v); 
     
            }
     
     
        }
     
        // print out what was read in
     
        for (int i=0; i<4; ++i)
        {
            for (int j=0; j<5; ++j)
            {
                cout<<array[i][j]<<"|";
                a=a+array[i][j];
     
            }
            cout << "\n";
        }cout<<"a="<<a<<endl;
     system("pause");
        return 0;
    }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 670
    Points : 10 677
    Points
    10 677
    Par défaut
    Ton code est 1 mélange de C et de C++, avec pleins de variables qui ne servent à rien
    Ton problème est ligne 41 : il faut remplir la ligne ET 1 FOIS REMPLIE, tu l'ajoutes (dans ton code, tu l'ajoutes à chaque valeur )

    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
    #include <fstream>
    #include <iostream>
    #include <sstream>
    #include <vector>
     
     
    #include <cstdlib>
     
     
    /*****************************************************************************/
    /***********************************  Main  **********************************/
    /*****************************************************************************/
     
    const std::string filepath = "C:/Users/click/Desktop/exemple.csv";
     
     
    int main(int argc, char** argv)
    {
        std::ifstream filename(filepath);
     
        if (!filename) {
            std::cerr << "main - error: can't open file " << filepath << std::endl;
     
            return EXIT_FAILURE;
        }
     
        std::vector< std::vector<double> > array;
        std::vector<double> array_line;
     
        std::string csv_line, word;
        double value;
     
        while ( getline(filename, csv_line) ) {
            array_line.clear();
            std::stringstream ss(csv_line);
     
            std::cout << "line: " << csv_line << std::endl;
     
            while ( getline(ss, word, ';') ) {
                value = strtod(word.c_str(), NULL);
     
                std::cout << "*) value: " << value << std::endl;
     
                array_line.push_back(value);
            }
     
            array.push_back(array_line);
        }
     
    //  Print out what was read in
        value = 0;
     
        std::vector< std::vector<double> >::iterator array_it = array.begin();
        std::vector<double>::iterator line_it;
     
        for(;array_it != array.end(); ++array_it) {
            line_it = array_it->begin();
     
            for(;line_it != array_it->end(); ++line_it) {
                printf("% 8.2f |", (*line_it));
     
                value = (value + (*line_it));
            }
            std::cout << "\n";
        }
     
        std::cout << "a = " << value << std::endl;
     
        system("pause");
     
     
        return EXIT_SUCCESS;
    }

    Édit : Si tu te demandes , std::cout est juste 1 m*rd* à formater et comme c'est 1 machine à états, il faut réinitialiser le flux à chaque fois

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2020
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Bonjour;
    merci foetus pour ton aide,
    j'ai fais quelques changement au niveau du calcule de la matrice sim parceque j'ai besoin de travailler avec une matrice avec des indices i et j pour faire plusieurs calcules à partir de cette matrice,
    par la suite je vais creer:
    - une fonction qui permet de lire le fichier csv
    - une focntion qui permet de faire le calcule de la matrice sim
    - une fonction qui permet de sauvegarder le résultat de la matrice sim dans un fichier csv



    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
    #include <fstream>
    #include <iostream>
    #include <sstream>
    #include <vector>
     
     
    #include <cstdlib>
     using namespace std;
     
    /*****************************************************************************/
    /***********************************  Main  **********************************/
    /*****************************************************************************/
     
    //const std::string filepath = "C:/Users/click/Desktop/exemple.csv";
     
     
    int sim[30][30];
     
    int main(int argc, char** argv)
    {
        std::ifstream filename("C:/Users/click/Desktop/exemple.csv");
     
        if (!filename) {
            std::cerr << "main - error: can't open file " << filename << std::endl;
     
            return EXIT_FAILURE;
        }
     
        std::vector< std::vector<double> > array;
        std::vector<double> array_line;
     
        std::string csv_line, word;
        double value;
     
        while ( getline(filename, csv_line) ) {
            array_line.clear();
            std::stringstream ss(csv_line);
     
            std::cout << "line: " << csv_line << std::endl;
     
            while ( getline(ss, word, ';') ) {
                value = strtod(word.c_str(), NULL);
                std::cout << "*) value: " << value << std::endl;
     
                array_line.push_back(value);
            }
     
            array.push_back(array_line);
        }
     
    //  Print out what was read in
        value = 0;
     int val=0;
     int sim[4][5]={0};
     
     
        vector< vector<double> >::iterator array_it = array.begin();
        vector<double>::iterator line_it;
     
     
     for(int i=0;i<4;++i)
     for(int j=0;j<4;++j)
     for(int k=0;k<5;++k)
     {
     sim[i][j]=array[i][k]+array[j][k];
    }
    for(int i=0;i<4;++i)
    {
     for(int j=0;j<4;++j)
     {
     cout<<sim[i][j];
    }
    cout<<endl;
    }
     
     
        system("pause");
     
     
        return EXIT_SUCCESS;
    }
    merci encore une fois

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

Discussions similaires

  1. [Python 3.X] Petite question bête sur le stockage d'un fichier csv dans une matrice
    Par uykraps dans le forum Général Python
    Réponses: 1
    Dernier message: 24/01/2020, 07h21
  2. [MySQL] Importer les données d'un fichier CSV dans une base de données
    Par joueur dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/11/2008, 11h59
  3. Réponses: 2
    Dernier message: 13/11/2007, 18h08
  4. [XSL] comment transformer ce fichier xml en une table html ?
    Par jlassira dans le forum XSL/XSLT/XPATH
    Réponses: 17
    Dernier message: 15/03/2006, 12h15
  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