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 :

problème de conception?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 5
    Par défaut problème de conception?
    Bonjour,
    je débute en c++ et je dois écrire un algorithme qui traite des fichiers csv et sauvegarde les données dans un tableau.
    J'ai écrit un premier code qui à l'air de fonctionner (il récupère correctement les données et les cases du tableau sont remplies correctement).
    Je vous le met en copie (si vous avez diverses remarques pour améliorer le truc, je suis preneur ! )
    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
    #include <iostream>
    #include <sstream>
    #include <fstream>
    #include <vector>
    #include <string>
     
     
    using namespace std;
    // Programme calculant le nombre de ligne du fichier
    int tailleFichier (string chemin)
    {   
        string line;
        ifstream fichierSource (chemin.c_str());
        int taille (0);
        while ( !fichierSource.eof() )
        {
            fichierSource >> line;
            ++taille;
        }
        fichierSource.close();
     
        return taille;
    }
     
    int main ()
    {   int const tailleInfluenceL=tailleFichier("influence.csv");
        string sourceI;
        ifstream fichierSourceInfluence ("influence.csv"); //ouverture du fichier
        getline (fichierSourceInfluence, sourceI);
        vector <double> tableauInfluence;
        istringstream ligneI(sourceI);
        string nombreStringI;
     
        getline (ligneI, nombreStringI, ';'); //récupération du premier terme inutile
        while (getline (ligneI, nombreStringI, ';')) // récupération des termes utiles
        {
            double nombreI(0);
            istringstream issI(nombreStringI);
            issI >> nombreI;
            tableauInfluence.push_back(nombreI);
     
        }
        fichierSourceInfluence.close(); // fermeture du fichier
        int const c=tableauInfluence.size();
        int const tailleInfluencel=c/tailleInfluenceL;
        cout << "ok////"<<tailleInfluencel ; // affichage test
     
        return 0;
    }

    Cependant, lorsque j'ai par exemple deux fichiers différents à lire, mon code ne fonctionne plus. Le voici (c'est le même sauf que j'ai ajouté le traitement d'un deuxième fichier):

    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
    #include <iostream>
    #include <sstream>
    #include <fstream>
    #include <vector>
    #include <string>
     
     
    using namespace std;
     
    //Programme calculant le nombre de ligne du fichier
    int tailleFichier (string chemin)
    {   
        string line;
        ifstream fichierSource (chemin.c_str());
        int taille (0);
        while ( !fichierSource.eof() )
        {
            fichierSource >> line;
            ++taille;
        }
       fichierSource.close();
     
        return taille;
    }
     
    int main ()
    {   
        //Fichier véhicule
        int tailleVehiculeL=tailleFichier("file.csv");
        string sourceV;
        ifstream fichierSourceVehicule ("file.csv");
        getline (fichierSourceVehicule, sourceV);
        vector <double> tableauVehicule;
        istringstream ligneV(sourceV);
        string nombreStringV;
     
        getline (ligneV, nombreStringV, ';');
        while (getline (ligneV, nombreStringV, ';'))
        {
            double nombreV(0);
            istringstream issV(nombreStringV);
            issV >> nombreV;
            tableauVehicule.push_back(nombreV);
     
        }
        fichierSourceVehicule.close();
        int const b=tableauVehicule.size();
        int  tailleVehiculel=b/tailleVehiculeL;
        cout <<"ok"<<"//"<<tailleVehiculel; //affichage test
     
     
        // fichier influence
        int tailleInfluenceL=tailleFichier("influence.csv");
        string sourceI;
        ifstream fichierSourceInfluence ("influence.csv");
        getline (fichierSourceInfluence, sourceI);
        vector <double> tableauInfluence;
        istringstream ligneI(sourceI);
        string nombreStringI;
     
        getline (ligneI, nombreStringI, ';');
        while (getline (ligneI, nombreStringI, ';'))
        {
            double nombreI(0);
            istringstream issI(nombreStringI);
            issI >> nombreI;
            tableauInfluence.push_back(nombreI);
     
        }
        fichierSourceInfluence.close();
        int const c=tableauInfluence.size();
        int const tailleInfluencel=c/tailleInfluenceL;
        cout << "ok////"<< tailleInfluencel; //affichage test
     
     
        return 0;
    }
    Le programme ne va pas jusqu'au bout et ne m'affiche rien. Du coup je me demandais si j'avais fait une erreur grossière de conception en c++ ou c'est tout autre chose.

    Je ne sais pas si cela sert mais j'utilise xCode 4.3.2 sous Mac OS X 10.7.3.
    Et au niveau de la taille des fichiers: le fichier file.csv est un fichier de 21 colonnes et d'environ 750 lignes et le fichier influence.csv est un fichier de 3 colonnes et d'une dizaine de lignes.

  2. #2
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Citation Envoyé par batetou52 Voir le message
    [...]
    Le programme ne va pas jusqu'au bout et ne m'affiche rien. Du coup je me demandais si j'avais fait une erreur grossière de conception en c++ ou c'est tout autre chose.
    [...]
    Que se passe-t-il ?
    La compilation se déroule-t-elle bien ?
    Le programme se termine-t-il sans aucun affichage ?
    Le programme plante-t-il ?
    Le programme tourne-t-il sans s'arrêter ?

    Sinon, tailleFichier est fausse : fichierSource >> line; devrait être remplacé par getline(fichierSource, line); pour compter le nombre de lignes comme l'indique le commentaire. Sinon, il va compter le nombre de mots (séparés par des espaces ou des changements de lignes, de mémoire).

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 5
    Par défaut
    Euh quand je dis que le programme ne va pas jusqu'au bout c'est qu'il ne se termine pas. Quand je demande à xCode de le relancer il me dit que le programme est toujours en train de tourner. De plus il ne m'affiche pas les cout << "ok"; .

    Concernant la compilation j'ai l'impression que cela se passe bien puisque Xcode me revoit "build succeed" lorsque je fais tourner le programme.


    Enfin pour tailleFichier, j'ai essayé avec getline. Mais le problème c'est qu'il m'affiche 1. Pour info mes fichiers sont de ce style:
    1;2;3
    4,1;3;8
    ... etc

  4. #4
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Pour tailleFichier, il faudrait que tu essaies d'afficher line à chaque tour de boucle, pour savoir pourquoi il renvoie toujours 1 avec getline(). Enfin, si aucun de tes fichiers ne contient d'espace au milieu d'une ligne, tout va bien.

    Sinon, après une lecture plus détaillée de ton code : l.37, tu veux bien "jeter" le premier élément ?

    Enfin, essaies d'afficher d'ajouter des << std::endl (ou << std::flush) à tes std::cout ; pour éviter d'avoir des problèmes de buffer qui pourraient t'empêcher de voir d'où vient le problème.

    Pour terminer, tu peux essayer d'afficher les données que tu utilises dans la boucle au fur et à mesure (donc un cout dans la boucle), pour voir plus précisément ce qui se passe.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 5
    Par défaut
    Désolé pour la réponse tardive.

    Alors tout d'abord pour tailleFichier, j'avais essayé un affichage de la ligne. Il me ressortait le fichier en entier. Il devait considérer le fichier comme une seule ligne.
    Et je veux effectivement bien jeter le premier élément.

    Concernant mon deuxième programme. J'ai ajouté un affichage des valeurs comme tu me l'a proposé.Donc le programme se bloque après avoir traité 12518 valeurs lors du traitement du fichier file. Il ne va pas plus loin et ne continue pas dans le traitement du fichier influence.
    J'ai donc ajouté un std::flush après les cout. Dans ce cas, il me traite le fichier file entièrement, mais se stoppe aussi. Il m'affiche tailleVehiculel et le "ok" mais ne traite pas le second fichier.

    Autre question du coup (je suis désolé, je suis un profane) ... qu'est ce qu'un buffer?
    Et enfin question plus générale: comment se fait t il que le traitement d'un fichier seul fonctionne correctement et que lorsque je veux traiter les deux d'un coup ça ne marche plus?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 5
    Par défaut
    L'ayant testé en compilant à la main, le programme tourne correctement sans les .
    Je suppose que cela vient de Xcode ...

    Alors toujours la même question:
    comment se fait t il que le traitement d'un fichier seul fonctionne correctement et que lorsque je veux traiter les deux d'un coup ça ne marche plus?

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

Discussions similaires

  1. Méthode Finalize et problème de conception
    Par phryos dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2006, 11h04
  2. [VB6][UserControl et OCX]Problème de conception
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/01/2006, 22h37
  3. Petit problème de conception sur access
    Par coooookinette dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2005, 18h24
  4. Gestion des départements problème de conception
    Par snoopy69 dans le forum Modélisation
    Réponses: 7
    Dernier message: 11/10/2005, 13h08
  5. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/05/2004, 23h13

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