Comment lire un fichier ligne par ligne en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la fonction std::getline() pour lire un fichier ligne par ligne
  2. Utiliser la bibliothèque C getline() Fonction pour lire un fichier ligne par ligne
Comment lire un fichier ligne par ligne en C++

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;
}
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Article connexe - C++ File