Comment lire un fichier ligne par ligne en C++
-
Utilisez la fonction
std::getline()
pour lire un fichier ligne par ligne -
Utiliser la bibliothèque C
getline()
Fonction pour lire un fichier ligne par ligne
Cet article présente comment lire un fichier ligne par ligne en C++.
Utilisez la fonction std::getline()
pour lire un fichier ligne par ligne
La fonction getline()
est le moyen préféré pour lire un fichier ligne par ligne en C++. La fonction lit les caractères du flux d’entrée jusqu’à ce que le caractère de délimitation soit rencontré, puis les stocke dans une chaîne. Le délimiteur est passé comme troisième paramètre optionnel, et par défaut, il est supposé être un nouveau caractère de ligne \n
.
Puisque la méthode getline()
retourne une valeur non nulle si les données peuvent être lues à partir du flux, nous pouvons la mettre comme une condition de boucle while
pour continuer à récupérer des lignes d’un fichier jusqu’à la fin de celui-ci. Notez que c’est une bonne pratique de vérifier si le flux d’entrée a un fichier associé avec la méthode is_open
.
#include <fstream>
#include <iostream>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::string;
using std::vector;
int main() {
string filename("input.txt");
vector<string> lines;
string line;
ifstream input_file(filename);
if (!input_file.is_open()) {
cerr << "Could not open the file - '" << filename << "'" << endl;
return EXIT_FAILURE;
}
while (getline(input_file, line)) {
lines.push_back(line);
}
for (const auto &i : lines) cout << i << endl;
input_file.close();
return EXIT_SUCCESS;
}
Utiliser la bibliothèque C getline()
Fonction pour lire un fichier ligne par ligne
La fonction getline
peut être utilisée de la même manière pour boucler le fichier ligne par ligne et stocker les lignes extraites dans une variable de chaîne de caractères. La principale différence est que nous devons ouvrir un flux de fichiers en utilisant la fonction fopen
, qui retourne l’objet FILE*
, qui sera ensuite passé comme troisième paramètre.
Remarquez que la fonction getline
stocke au niveau du pointeur char
, qui est défini à nullptr
. Ceci est valable parce que la fonction elle-même alloue la mémoire dynamiquement pour les caractères récupérés. Ainsi, le pointeur char
devrait être explicitement libéré par un programmeur, même si l’appel getline
a échoué.
De plus, il est important de mettre le second paramètre de type size_t
à 0 avant d’appeler la fonction. Vous pouvez voir le manuel détaillé de la fonction getline
ici.
#include <iostream>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main() {
string filename("input.txt");
vector<string> lines;
char* c_line = nullptr;
size_t len = 0;
FILE* input_file = fopen(filename.c_str(), "r");
if (input_file == nullptr) return EXIT_FAILURE;
while ((getline(&c_line, &len, input_file)) != -1) {
lines.push_back(line.assign(c_line));
}
for (const auto& i : lines) {
cout << i;
}
cout << endl;
fclose(input_file);
free(c_line);
return EXIT_SUCCESS;
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook