Les Allergies
Alimentaires
Posez votre question Signaler

[C++] lire un fichier texte ligne par ligne [Résolu]

Bussy14 46Messages postés 29 octobre 2006Date d'inscription - Dernière réponse le 8 févr. 2009 à 03:53
Bonjour tout le monde,
J'ai recherché quelque temps sur le forum un moyen de lire un fichier ligne par ligne en c++. J'ai trouvé plusieurs façon, mais aucune ne marchant vraiment, ou en tout cas, soit pas de la façon dont je voulais, soit à cause de mon compilateur (fort possible).
En faisant un mix de plusieurs sources différentes et quelques autres sites de références en c++ et en y ajoutant ma touche personnelle, j'ai fini par trouver un moyen qui fonctionne plutôt bien, en tout cas sur mon compilateur (Metrowerks CodeWarrior), voici, pour ceux qui pourraient en avoir besoin, mon code:
#include <iostream>
#include <fstream>
using namespace std;

void main() {
    fstream fichier("test fichier.txt");
    if ( !fichier ) {               // si le fichier n'est pas trouvé
        cout << "fichier inexistant";
    } else {                        // sinon
        bool continuer = true;      // indicateur de fin de fichier
        while( continuer ) {	
            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
                cout << ch << endl; //   afficher celle-ci
             else                   // sinon
                continuer = false;  //   sortir de la boucle de lecture
        }
    }
}

Pour ceux qui savent comment tester si la fin du fichier est atteinte, ou qui ont un meilleur moyen à me proposer, je suis ouvert à toute discussion, je préviens, je débute en C++.
voici en plus une petite liste de sites bien utiles:
http://www.cppreference.com/
http://www.cplusplus.com/
http://c.developpez.com/
et pour ceux qui passent comme moi de Java à C++:
http://www.infres.enst.fr/~elc/C++/
http://www-etud.iro.umontreal.ca/~duranlef/doc/cpp_pour_javiste/
http://www.horstmann.com/ccj2/ccjapp3.html (en anglais)
En espérant que ça pourrait être utile à quelqu'un d'autre qu'à moi.
Bonne prog à tous!
Lire la suite 

[C++] lire un fichier texte ligne par ligne »

Suggestions
7 réponses
Réponse
+13
moins plus
alors voila je sais que ce post est résolu, est ce depuis plus d'un an...
mais j'ai touvé une methode assez efficace je pense pour pouvoir lire un fichier ligne par ligne

je vous fais part de mon code:
j'utilise les vector car a la base on ne sait pas quelle taille a le fichier, et j'ai besoin de stocker le contenu dans un tableau pour mon programme

#include <fstream>
#include <vector>

using namespace std;

int main() {

    fstream fichier("monde1.txt");
    vector <string> monTableau;

    if ( !fichier )
        cout << "fichier inexistant";
    else
    {
        bool continuer = true;

        while( !fichier.eof() )
        {
            monTableau.push_back("");//creation d'une ligne vide

            getline(fichier, monTableau.back());//lecture d'une ligne du fichier

            int ligne = monTableau.size() - 1;//je recupere la taille du tableau (-1 pour la ligne 0)

            if(monTableau[ligne].empty())//si la ligne est vide
                monTableau.pop_back();//on la retire du tableau
        }

        cout << "nombre de lignes : " << monTableau.size() << endl;//j'affiche le nombre de lignes pour test
    }
    return 0;
}


comme l'a dit Bussy14, si ca peut en aider certains...
Ajouter un commentaire
Réponse
+9
moins plus
Il y a beaucoup plus simple :
http://c.developpez.com/faq/cpp/?page=fichiers#FICHIERS_lecture_par_ligne

Bonne chance
Bussy14- 22 nov. 2006 à 17:45
Salut!

Merci oui, mon code provient principalement de ce site, mais je sais pas pourquoi, quand j'essayais hier ça fonctionnait pas, enfin faut dire que chez moi il était 3-4h du matin, et j'étais assez fatigué, il me fallait juste une méthode qui lit un fichier ligne par ligne, et j'avais un bug dans mon IDE de merde (oui oui, n'essayez jamais CodeWarrior, mais de toute façon vous n'en n'avez sûrement jamais entendu parler! La plupart des étudiants qui suivent le cours se plaignent... enfin bon, n'allons pas trp cracher sur mon prof qui est à l'origine du compilateur! ^.^). Et donc j'ai supposé, après moult recherches et googlisages (faudrait officialiser un verbe pour décrire la recherche dans google) que ca aurait dû fonctionner, et que encore une fois, mon IDE me mettait dans la -biip-.
Mais arrivé "tout frais" (ou presque) ce matin, je réessaie avec un getline, et ca fonctionne... allez savoir ce que j'avais écrit hier... p-e un problème de type de ma variable fichier...

Donc l'erreur était de moi, désolé, la fatigue et le stress engendré par une date de remise proche (aujourd'hui lol) m'ont fait faire des bêtises, je ne recommencerai plus!

Merci encore à toi!
Ajouter un commentaire
Réponse
+1
moins plus
Pas de problème ;)
Ajouter un commentaire
Réponse
+1
moins plus
SI mais lire un fichier c'est lent, car il faut le parser (le lire, extraire les morceaux intéressants, les mettre dans une structure de donnée). En particulier un fichier texte n'est pas pratique à manipuler pour stocker de l'information au cours de l'exécution d'un programme.

D'un point de vue il faut donc voir le volume ainsi généré. A priori il est de très inférieur à la taille du fichier texte puisque par nature une structure C/C++ est "binaire", et ne "gaspille" pas de place comparé à un fichier texte. Ca suppose évidemment que la structure en question ne soit pas une chaîne de caractère contenant tout le fichier :-) Comme les fichiers textes sont généralement petits, ce n'est donc pas gênant.

A titre indicatif quand un fichier texte devient trop volumineux on a recours à des structures serialisées qui sont, pour faire simple, le contenu binaire qui sera directement chargé en mémoire. Cette technique permet donc de réduire fortement le volume d'un fichier d'entrée, et surtout son temps de chargement qui est généralement long.

En espérant avoir répondu à ta question...
Ajouter un commentaire
Réponse
+0
moins plus
n'est ce pas couteux ne mémoire de lire un fichier.txt que de passer le contenu d'un fichier en paramètre
Ajouter un commentaire
Réponse
+0
moins plus
Merci pour ta contribution ;-)
Ajouter un commentaire
Ce document intitulé « [C++] lire un fichier texte ligne par ligne » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?