Rechercher : dans
Par :

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

Dernière réponse le 6 mai 2009 à 13:39:35 Bussy14, le 22 nov 2006 à 09:32:49 
 Signaler ce message aux modérateurs

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!

Meilleures réponses pour « [C++] lire un fichier texte ligne par ligne » dans :
MySQL - Chargement d'un fichier texte dans une table VoirPour charger une fichier texte défini comme suit : $ tail /home/user1/test.txt 'nom1',1,9 'nom2',2,3 'nom3',3,54 'nom4',4,2 'nom5',5,9 Dans une table définie comme suit : CREATE TABLE chargertest ( ...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...

1

mamiemando, le 22 nov 2006 à 14:21:02
Répondre à mamiemando

2

Bussy14, le 22 nov 2006 à 17:45:11

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!

Répondre à Bussy14

3

mamiemando, le 23 nov 2006 à 01:11:50

Pas de problème ;)

Répondre à mamiemando

4

mehdi, le 12 déc 2007 à 17:07:35

N'est ce pas couteux ne mémoire de lire un fichier.txt que de passer le contenu d'un fichier en paramètre

Répondre à mehdi

5

mamiemando, le 12 déc 2007 à 20:12:06

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...

Répondre à mamiemando

6

nours, le 7 fév 2009 à 18:40:03
  • +3

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...

Répondre à nours

7

 mamiemando, le 8 fév 2009 à 03:53:14

Merci pour ta contribution ;-)

Répondre à mamiemando
Collection CommentÇaMarche.net