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 avec ifstream


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Lecture avec ifstream
    Bonjour,

    Je suis nouveau dans ce forum et novice en programmation, j'espère que mon post est au bon endroit. Je cherche depuis plusieurs jours le moyen d'effectuer ceci :

    Déclarer un ifstream dans un fichier cpp et le relier à un fichier .map contenant les informations suivantes :

    =====================
    500
    10
    1 0 2 1 0 2 0 0 2 0 1 1 0 2 ...... n
    3.456793 123.455 43.3 23.45
    =====================

    Ce que je veux précisément, c'est lire en premier la ligne 1 (500) et stocker 500 dans un int. Ensuite lire la ligne 2 et stocker 10 dans un float. Et enfin lire la ligne 3 dont je connais la taille, et mettre chaque élément seul dans une cellule d'un std::vector. Ensuite j'aimerais arrêter la lecture et ne pas lire les double qui suivent à la ligne 4. A noter : à la ligne 3 entre chaque chiffre, il y a un espace ( utilisation de std::ws ?? ).

    J'ai donc pensé à un push_back pour le tableau, mais je ne vois pas comment lire les lignes une à une et les stocker dans des variables différentes, et encore moins comment lire chaque chiffre de la ligne 3 pour les stocker dans le même std::vector ( fonction std::getline() ?? ). La déclaration d'un ifstream et le lien avec le fichier n'est pas le problème mais bien le reste.

    Si quelqu'un a un tuyau pour m'aider, ce serait très aimable.
    Merci, bonnes salutations et bon dimanche de Pâques

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Salut,

    il te suffit d'utiliser l'opérateur>> de ton stream pour chaque donnée.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Salut et merci beaucoup pour ta réponse. Mais je ne saisi pas encore vraiment quelle syntaxe utiliser. Si je fais par exemple :

    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
     
       std::ifstream lecture;   // mon flot de lecture
     
       std::string fileName(getPath());  // donne le chemin du fichier 
     
       lecture.open(fileName.c_str());  // le lien et l'ouverture du fichier est faite
     
       if(! lecture.fail()){
     
                   short var;
     
                   lecture >> nbCells_;   // variable de type int qui prendrait la première ligne (500)
                   lecture >> cellSize;   // variable de type float qui prendrait la deuxième ligne (10) 
     
                   int i(0);   // compteur
     
                  /* ==========================
                   * ici, je veux que mon flot lise la ligne 3 et mette chaque chiffre dans une cellule de  mon tableau
                   * préalablement déclaré cells_, en m'aidant d'une fonction qui convertit ma variable var short en 
                   * Kind, car cells_ est un std::vector de Kind
                   * ========================== */
     
                   while((lecture >> var) and (i<=nbCells * nbCells)){ cells_.push_back(static_cast<Kind>(var)); ++i ; }
     
       }
     
       lecture.close();

    Est-ce correcte par rapport à ce que je veux faire ?
    Merci beaucoup d'avance !

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    lecture >> var lira des entiers séparés, il faut distinguer les espaces séparateurs de la fin de ligne qui est aussi un séparateur.
    On peut par exemple faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::string ligne;
    if ( std::getline( lecture , ligne ) ) {
       std::istringtream dansligne( ligne );
       for ( int i = 0 ; (dansLigne >> var)  &&  i <= nbCells * nbCells ; ++i ) {
          cells_.push_back( static_cast<Kind>(var) );
       }
    }
    Il faudra peut être ajouter avant un std::getline( lecture , ligne ) car les lectures précédentes ont dû laisser une fin de ligne dans le buffer de lecture.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse je vais essayer de faire ça de cette manière !

Discussions similaires

  1. fichier binaire lecture avec ifstream
    Par debutant100 dans le forum Langage
    Réponses: 1
    Dernier message: 19/09/2011, 19h43
  2. Réponses: 2
    Dernier message: 23/06/2009, 08h42
  3. Lecture de nan et inf avec ifstream?
    Par keldorn dans le forum SL & STL
    Réponses: 1
    Dernier message: 05/09/2007, 09h34
  4. [DOM] Problème de lecture avec DOM
    Par samios dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 29/09/2004, 15h58
  5. Probleme avec ifstream
    Par maitre hibou dans le forum SL & STL
    Réponses: 12
    Dernier message: 12/05/2004, 13h33

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