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 :

Lectue dans un fichier texte


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Par défaut Lectue dans un fichier texte
    Bonjour!
    J ai un fichier texte, et je voudrai pouvoir lire la première ligne, et la stocker dans une variable, puis ensuite lire la seconde, la stocker dans une aitre variable,etc..quelq'un peut-il m aider?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par rodgeurette
    Bonjour!
    J ai un fichier texte, et je voudrai pouvoir lire la première ligne, et la stocker dans une variable, puis ensuite lire la seconde, la stocker dans une aitre variable,etc..quelq'un peut-il m aider?
    le C++ ne connait pas la notion de lignes...
    par contre, si tu veux parler de ce qui est contenu entre deux '\n', la on peut se comprendre.

    as tu regardé la doc de la classe std::ifstream, et particulierement de sa fonction getline() ?

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tout ça est expliqué dans la FAQ.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    le C++ ne connait pas la notion de lignes...
    C'est quand même assez contradictoire de dire ça, puis de conseiller d'utiliser une fonction qui s'appelle getline

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Laurent Gomila
    C'est quand même assez contradictoire de dire ça, puis de conseiller d'utiliser une fonction qui s'appelle getline
    sauf que getline() prend un parametre par défaut (de valeur '\n') mais qui peut etre changé

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Donc c'est encore mieux que de pouvoir lire que "ligne par ligne" car on peut lire des blocs de caractères séparés par un séparateur précis.
    Tu y vois un problème ? Faut le vouloir

    Du moment où l'on parle de \n, on parle de lignes de toute manière ...

  7. #7
    Membre expérimenté Avatar de Sceener
    Inscrit en
    Mai 2007
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 231
    Par défaut
    ça peut t'aider :

    Exemple : Read and display a text file line by line.

    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
    #include <iostream>
    #include <fstream>
    using namespace std;
     
    int main(int argc, char *argv[])
    {
      if(argc != 2) {
        cout << "Usage: Display <filename>\n";
        return 1;
      }
     
      ifstream in(argv[ 1 ]);                 // input
     
      if(!in) {
        cout << "Cannot open input file.\n";
        return 1;
      }
     
      char str[ 255 ];
     
      while(in) {
        in.getline(str, 255);                // delim defaults to '\n'
        if(in) 
           cout << str << endl;
      }
     
      in.close();
     
      return 0;
    }

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Très bon exemple de comment il ne pas faire, Sceener . Pour la solution correcte, voir la FAQ.

  9. #9
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    @ Screener==>

    De manière à ce que tu puisse corriger tes erreurs, voici quelques explications qui te permettront de les comprendre:

    Ton code
    sous-entend que, au pire, ta ligne fera 254 caracteres (vu qu'il faut le '\0' pour la terminer)
    Or, il n'y a strictement rien qui empeche d'avoir un fichier texte dont la ligne prend (tres) largement plus que 254 caracteres avant le retour à la ligne

    Le problème, c'est que, meme si tu décidait de mettre 65535, voire, pourquoi pas, un nombre encore plus élevé, tu ne serait toujours pas sur de prévoir une place suffisante, et, d'aucun s'écriraient à ce moment là que, de plus, tu va monopoliser inutilement, pour une seule variable, un espace mémoire qui pourrait etre tellement utile pour autre chose.

    La SL fournit une classe réellement géniale pour gérer les chaines de caracteres, et qui prend tous les cas en compte: la std::string (voir, si tu travailles en UTF, une spécialisation de celle-ci avec les wchar_t)

    Le code
    pose une série de problèmes, ainsi d'ailleurs que l'utilisation de
    On préféreras bien souvent utiliser tout simplement une boucle du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(getline,fichier, string)
    (voir la FAQ sur le sujet)

    Pour t'en convaincre, je voudrais simplement que tu prenne la peine d'essayer de lire le fichier joint avec le code, dérivé du tien que voici:
    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
     
    int main()
    {
        std::ifstream iss("essai.txt");
        char str[255];
        while(iss)
        {
        iss.getline(str,255);
        std::cout<<str<<std::endl<<std::endl;
        }
        if(!iss.eof())
        {
            std::cout<<"COUAC... ou est le reste du fichier???";
        }
        return 0;
    }
    Enfin, le code est ici inutile: la variable étant détruite deux instructions plus tard (quand la fonction est quittée ) le fichier sera automatiquement fermé
    Fichiers attachés Fichiers attachés
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/07/2004, 09h30
  2. Réponses: 2
    Dernier message: 02/03/2004, 19h38
  3. Réponses: 3
    Dernier message: 22/02/2004, 20h09
  4. [LG]rechercher dans un fichier texte
    Par BadFox dans le forum Langage
    Réponses: 11
    Dernier message: 01/12/2003, 15h57
  5. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13

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