web-dev-qa-db-fra.com

Comment lire ligne par ligne ou tout un fichier texte à la fois?

Je suis dans un tutoriel qui introduit des fichiers (comment lire et écrire de\dans un fichier)

Tout d'abord, ce n'est pas un devoir, c'est simplement une aide générale que je recherche.

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

Et si mon fichier contient 1000 mots? Il n'est pas pratique de lire chaque mot.

Mon fichier texte nommé (Lire) contient les éléments suivants:

J'aime jouer à des jeux j'aime lire j'ai 2 livres

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 possible de lire le fichier entier en une fois, au lieu de lire chaque ligne ou chaque mot séparément?

76
Mody

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 vaut mieux construire le flux de fichiers avec les noms de fichier dans son constructeur plutôt que de l'ouvrir explicitement (de même que pour la fermeture, laissez simplement le destructeur faire le travail).

Une documentation complémentaire sur std::string::getline() peut être lue à l’adresse référence CPP .

La façon la 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');
}  
144
111111

Je sais que c'est un fil vraiment très ancien, mais j'aimerais aussi indiquer une autre façon qui est en réalité 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;
}
19
user2673553

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

4
Bartek Banachewicz

Pour ce faire, vous pouvez é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;
}
4
AnkitSablok

Une autre méthode qui n'a pas encore été mentionnée est std::vector.

std::vector<std::string> line;

while(file >> mystr)
{
   line.Push_back(mystr);
}

Ensuite, vous pouvez simplement parcourir le vecteur et modifier/extraire ce dont vous avez besoin /

1
Bugster