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 :

[Debutant] Lire et parser un fichier de données ?


Sujet :

C++

  1. #1
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut [Debutant] Lire et parser un fichier de données ?
    Bonjour,

    voila, je dispose de fichiers de données de la forme :

    valeur1 [espace] valeur2 [espace] valeur3 [retour_chariot]


    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1.01 2.03 -10.0
    6.1 3.2 -123.3
    8.2 6.2 96.4
    ....
    Je cherche dans mon petit programme à charger le fichier et mettre le resultat dans une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vecteur3D = vector<point3D>;
    .

    Bon, j'ai trouvé ce 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
      std::fstream fichier("Data_1.txt");
        if ( !fichier ) {               // si le fichier n'est pas trouvé
            std::cout << "fichier inexistant";
        } else {                        // sinon
            bool continuer = true;      // indicateur de fin de fichier
            while( continuer ) {
                std::string ch;              // chaine contenant une ligne du fichier
                fichier >> ch;   // ranger une ligne dans ch
                if ( ch != "" )         // si la ligne n'est pas vide faire
                  std::cout <<(double)(ch) << std::endl; //   afficher celle-ci
                else                   // sinon
                    continuer = false;  //   sortir de la boucle de lecture
            }
      }
    A l'execution j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    valeur1
    valeur2
    valeur3
    valeur1  // ligne d'aprés
    valeur2
    valeur3
    comment je peux capturer ces valeurs pour creer de point3D, j'ai un probléme de coversion car c'est des string et je veux des double


    Merci,

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Si je puis me permettre pourquoi tu n'utiliserais pas ceci pour la conversion :
    Comment convertir une string en un entier ?

    Tu remplaces juste le int par float ou double et ça devrait être bon

    Tu as également ceci pour découper ta chaîne de caractères et obtenir tes différents point x,y,z : Comment découper une chaîne en fonction d'un séparateur ?

  3. #3
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Merci de la réactivité .

    Je vais voir tes liens et je reviens poster mes conclusions,

    Encore merci.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    A noter que
    ne lit pas une ligne, ça lit tous les caractères jusqu'au premier caractère blanc. Pour une ligne il faut utiliser getline().
    Qui plus est, vu la nature de ton fichier, tu peux juste te permettre de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float machin;
    fichier >> machin;

  5. #5
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Autrement dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while( getline(fichier,ligne) ) { traitement; }

  6. #6
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Merci beaucoup, j'ai trouver une solution qui marche bien. Mais je ne suis pas sur c'est la meilleure.

    Voici le code ( en VO ) si une autre personne veut s'en servir :

    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
     
      /* Load Data */
      std::fstream file("Data_File.txt");
      if (!file) {
        std::cout << "file not found";
      }
      else {
        std::string line;
        double* data = new double[3];
        int i;
     
        while (getline(file, line)) {
          std::istringstream iss(line);
          std::string _str;
          i = 0;
     
          while (getline(iss, _str, ' ')) {
            std::istringstream _real(_str);
            _real >> data[i];
     
            #if 1 // Debug
            std::cout << data[i]<<" # ";
            #endif
     
            i += 1;
          }
          #if 1 // Debug
            std::cout << std::endl;
          #endif
        }
      }
    PS :

    il y a une ligne de code ou je sauvegarde le point3d courant que j'ai supprimer .

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

Discussions similaires

  1. Lire, Extraire, Parser un fichier PKCS15
    Par noxious dans le forum Sécurité
    Réponses: 0
    Dernier message: 03/09/2013, 20h32
  2. Réponses: 13
    Dernier message: 29/09/2008, 08h10
  3. [debutant] Lire un fichier .wav
    Par r0d dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/02/2006, 09h42
  4. [C#] Comment lire et parser un fichier html ?
    Par fix105 dans le forum C#
    Réponses: 4
    Dernier message: 28/01/2006, 15h38
  5. [debutant]parser un fichier
    Par morphisme dans le forum Langage
    Réponses: 2
    Dernier message: 27/12/2005, 19h00

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