792 Stimmen

Datei zeilenweise lesen mit ifstream in C++

Der Inhalt von file.txt lautet wie folgt:

5 3
6 4
7 1
10 5
11 6
12 3
12 4

Donde 5 3 ist ein Koordinatenpaar. Wie kann ich diese Daten Zeile für Zeile in C++ verarbeiten?

Ich kann die erste Zeile abrufen, aber wie kann ich die nächste Zeile der Datei abrufen?

ifstream myfile;
myfile.open ("file.txt");

6voto

Universus Punkte 386

Diese Antwort ist für Visual Studio 2017 und wenn Sie aus einer Textdatei lesen möchten, deren Speicherort relativ zu Ihrer kompilierten Konsolenanwendung ist.

Legen Sie zunächst Ihre Textdatei (in diesem Fall test.txt) in Ihren Lösungsordner. Nach dem Kompilieren behalten Sie die Textdatei im selben Ordner wie applicationName.exe

C:\Users\ "Nutzername" \source\repos\ "Lösungsname"\"Lösungsname"

#include <iostream>
#include <fstream>

using namespace std;
int main()
{
    ifstream inFile;
    // open the file stream
    inFile.open(".\\test.txt");
    // check if opening a file failed
    if (inFile.fail()) {
        cerr << "Error opeing a file" << endl;
        inFile.close();
        exit(1);
    }
    string line;
    while (getline(inFile, line))
    {
        cout << line << endl;
    }
    // close the file stream
    inFile.close();
}

5voto

Vijay Bansal Punkte 619

Es besteht zwar keine Notwendigkeit, die Datei manuell zu schließen, aber es ist eine gute Idee, dies zu tun, wenn der Umfang der Dateivariablen größer ist:

    ifstream infile(szFilePath);

    for (string line = ""; getline(infile, line); )
    {
        //do something with the line
    }

    if(infile.is_open())
        infile.close();

3voto

mjr2000 Punkte 90

Dies ist eine allgemeine Lösung, um Daten in ein C++-Programm zu laden, und verwendet die Funktion readline. Dies könnte für CSV-Dateien geändert werden, aber das Trennzeichen ist hier ein Leerzeichen.

int n = 5, p = 2;

int X[n][p];

ifstream myfile;

myfile.open("data.txt");

string line;
string temp = "";
int a = 0; // row index 

while (getline(myfile, line)) { //while there is a line
     int b = 0; // column index
     for (int i = 0; i < line.size(); i++) { // for each character in rowstring
          if (!isblank(line[i])) { // if it is not blank, do this
              string d(1, line[i]); // convert character to string
              temp.append(d); // append the two strings
        } else {
              X[a][b] = stod(temp);  // convert string to double
              temp = ""; // reset the capture
              b++; // increment b cause we have a new number
        }
    }

  X[a][b] = stod(temp);
  temp = "";
  a++; // onto next row
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X