100 votes

Comment lire un fichier ligne par ligne ou tout un fichier texte en une seule fois ?

Je suis dans un tutoriel qui présente les fichiers (comment lire depuis un fichier et écrire dans un fichier).

Tout d'abord, il ne s'agit pas d'un devoir, mais d'une aide générale que je recherche.

Je sais comment lire un mot à la fois, mais je ne sais pas comment lire une ligne à la fois, ni comment lire l'ensemble du fichier texte.

Que faire si mon fichier contient 1000 mots ? Il n'est pas pratique de lire un fichier entier mot par mot.

Mon fichier texte nommé "Read" contient les éléments suivants :

I love to play games
I love reading
I have 2 books

Voici ce que j'ai accompli jusqu'à présent :

#include <iostream>
#include <fstream>

using namespace std;
int main (){

  ifstream inFile;
  inFile.open("Read.txt");

  inFile >>

Existe-t-il un moyen de lire l'ensemble du fichier en une seule fois, au lieu de lire chaque ligne ou chaque mot séparément ?

189voto

111111 Points 8668

Vous pouvez utiliser std::getline :

#include <fstream>
#include <string>

int main() 
{ 
    std::ifstream file("Read.txt");
    std::string str; 
    while (std::getline(file, str))
    {
        // Process str
    }
}

Notez également qu'il est préférable de construire le flux de fichiers avec les noms de fichiers dans son constructeur plutôt que de l'ouvrir explicitement (de même pour la fermeture, laissez le destructeur faire le travail).

Documentation supplémentaire sur std::string::getline() peut être lu à l'adresse suivante Référence CPP .

Le moyen le plus simple de lire un fichier texte entier est probablement de concaténer les lignes récupérées.

std::ifstream file("Read.txt");
std::string str;
std::string file_contents;
while (std::getline(file, str))
{
  file_contents += str;
  file_contents.push_back('\n');
}

23voto

user2673553 Points 71

Je sais qu'il s'agit d'un très vieux fil de discussion mais j'aimerais également signaler une autre méthode qui est en fait très simple... Voici un exemple de code :

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {

    ifstream file("filename.txt");
    string content;

    while(file >> content) {
        cout << content << ' ';
    }
    return 0;
}

5voto

Bartek Banachewicz Points 13173

Je pense que vous pouvez utiliser la fonction istream .read(). Vous pouvez simplement boucler avec une taille de morceau raisonnable et lire directement dans le tampon mémoire, puis l'ajouter à une sorte de conteneur mémoire arbitraire (tel que std::vector). Je pourrais écrire un exemple, mais je doute que vous vouliez une solution complète ; faites-moi savoir si vous avez besoin d'informations supplémentaires.

5voto

AnkitSablok Points 424

Pour ce faire, on peut également utiliser la fonction freopen fournie en C++. http://www.cplusplus.com/reference/cstdio/freopen/ et lire le fichier ligne par ligne comme suit : - :

#include<cstdio>
#include<iostream>

using namespace std;

int main(){
   freopen("path to file", "rb", stdin);
   string line;
   while(getline(cin, line))
       cout << line << endl;
   return 0;
}

3voto

Chiang Cliff Points 63

Les solutions ci-dessus sont excellentes, mais il existe une meilleure solution pour "lire un fichier en une fois" :

fstream f(filename);
stringstream iss;
iss << f.rdbuf();
string entireFile = iss.str();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X