Wie man eine Datei Zeile für Zeile in C++ liest

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktion std::getline(), um eine Datei Zeile für Zeile zu lesen
  2. Verwenden Sie die getline() Funktion der C-Bibliothek, um eine Datei Zeile für Zeile zu lesen
Wie man eine Datei Zeile für Zeile in C++ liest

Dieser Artikel führt ein, wie man eine Datei Zeile für Zeile in C++ liest.

Verwenden Sie die Funktion std::getline(), um eine Datei Zeile für Zeile zu lesen

Die getline() Funktion ist die bevorzugte Art, eine Datei Zeile für Zeile in C++ zu lesen. Die Funktion liest Zeichen aus dem Eingabestrom, bis das Trennzeichen angetroffen wird, und speichert sie dann in einer Zeichenkette. Das Begrenzungszeichen wird als dritter optionaler Parameter übergeben, und standardmäßig wird angenommen, dass es sich um ein Neuzeilen-Zeichen \n handelt.

Da die getline-Methode einen Wert ungleich Null zurückgibt, wenn die Daten aus dem Datenstrom gelesen werden können, können wir es als while-Schleifenbedingung setzen, um mit dem Abrufen von Zeilen aus einer Datei fortzufahren, bis das Ende der Datei erreicht ist. Beachten Sie, dass es gute Praxis ist, zu überprüfen, ob der Eingabestrom eine mit der is_open-Methode verknüpfte Datei hat.

#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;
}

Verwenden Sie die getline() Funktion der C-Bibliothek, um eine Datei Zeile für Zeile zu lesen

Die getline-Funktion kann auf ähnliche Weise verwendet werden, um die Datei Zeile für Zeile durchzuschleifen und extrahierte Zeilen in einer Zeichenkettenvariablen zu speichern. Der Hauptunterschied besteht darin, daß wir einen Dateistream mit der fopen-Funktion öffnen sollten, die das FILE*-Objekt zurückgibt, das später als dritter Parameter übergeben wird.

Beachten Sie, daß die getline-Funktion am char-Zeiger speichert, der auf nullptr gesetzt ist. Dies ist gültig, weil die Funktion selbst den Speicher für abgerufene Zeichen dynamisch allokiert. Daher sollte der char-Zeiger von einem Programmierer explizit freigegeben werden, auch wenn der getline-Aufruf fehlgeschlagen ist.

Außerdem ist es wichtig, den zweiten Parameter vom Typ size_t vor dem Aufruf der Funktion auf 0 zu setzen. Sie können das detaillierte Handbuch zu der getline-Funktion hier nachlesen.

#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;
}
Autor: 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

Verwandter Artikel - C++ File