Je suis dans un tutoriel qui présente les fichiers (comment lire et écrire depuis \ vers un fichier)
Tout d'abord, ce n'est pas un devoir, c'est juste 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 ou comment lire le fichier texte en entier.
Et si mon fichier contient 1 000 mots? Il n'est pas pratique de lire chaque mot.
Mon fichier texte nommé (Read) contient les éléments suivants:
J'adore jouer à des jeux J'adore 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 à la fois, au lieu de lire chaque ligne ou chaque mot séparément?
Réponses:
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 simplement le flux de fichiers avec les noms de fichiers dans son constructeur plutôt que de l'ouvrir explicitement (il en va de même pour la fermeture, laissez simplement le destructeur faire le travail).
De plus amples informations sur
std::string::getline()
peuvent être lues dans la 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'); }
la source
while(getline(f, line)) { ...}
vraiment la manière recommandée de le faire. Ceci est expliqué ici: gehrcke.de/2011/06/… --- vous y trouverez également des approches utiles pour une gestion correcte des erreurs.#include <iostream>
#include <iostream>
nécessaire? Il me semble que<fstream>
et<string>
sont assez. Si vous voulez direstd::getline
, c'est dedans<string>
, pas dedans<iostream>
.Je sais que c'est un fil vraiment très ancien, mais j'aimerais également souligner une autre manière 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; }
la source
Je pense que vous pouvez utiliser la fonction istream .read (). Vous pouvez simplement faire une boucle avec une taille de bloc 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 avez besoin d'informations supplémentaires.
la source
Eh bien, 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; }
la source
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 /
la source
vector
est une étape inutile. Vous pouvez itérer sur l'ifstream
utilisationstd::istream_iterator<std::string>(inFile)
.vous pouvez également l'utiliser pour lire toutes les lignes du fichier une par une, puis imprimer i
#include <iostream> #include <fstream> using namespace std; bool check_file_is_empty ( ifstream& file){ return file.peek() == EOF ; } int main (){ string text[256]; int lineno ; ifstream file("text.txt"); int num = 0; while (!check_file_is_empty(file)) { getline(file , text[num]); num++; } for (int i = 0; i < num ; i++) { cout << "\nthis is the text in " << "line " << i+1 << " :: " << text[i] << endl ; } system("pause"); return 0; }
j'espère que cela pourrait vous aider :)
la source
bonjour bro c'est un moyen de lire la chaîne dans la ligne exacte en utilisant ce code
j'espère que cela pourrait vous aider!
#include <iostream> #include <fstream> using namespace std; int main (){ string text[1]; int lineno ; ifstream file("text.txt"); cout << "tell me which line of the file you want : " ; cin >> lineno ; for (int i = 0; i < lineno ; i++) { getline(file , text[0]); } cout << "\nthis is the text in which line you want befor :: " << text[0] << endl ; system("pause"); return 0; }
Bonne chance !
la source