Probleme Zeilenweise einlesen in Stringarray



  • Hallo,

    ich komme bei einem Programm leider nicht weiter. Ich möchte eine Textdatei zeilenweise einlesen und die Zeilen in ein Stringarray speichern.
    Zur Überprüfung wollte ich mir jede Zeile ausgeben lassen, aber irgendwie klappts nicht mit der Ausgabe.
    Könnt ihr mir sagen wo mein Fehler liegt?
    Danke

    #include<string>
    #include<cstdlib> // für exit( )
    #include<fstream>
    #include<iostream>
    #include<vector>
    #include<string>

    using namespace std;

    int main( ) {

    int i;
    vector<string>stringarray;

    ifstream file; // Eingabestrom
    string filename;
    cout << "Quelldatei? ";
    cin >> filename;

    // Datei öffnen:
    file.open(filename.c_str(), ios::binary|ios::in);
    //quelle.open(quelldateiname, ios::binary|ios::in); // neuer Standard?!
    // Ohne {\tt ios::binary} sind nur Textdateien kopierbar?!

    if (!file) { // Fehlerabfrage
    cerr << filename
    << " kann nicht geöffnet werden!\n";
    exit(-1);
    }

    string line="";
    while (getline(file,line)) stringarray.push_back(line);
    {
    cout<<stringarray[i]<<endl;
    ++i
    }
    return 0;
    } // Ende



  • 1. Lass exit() aus dem Spiel.
    2. #include<cstdlib> << raus lassen
    3. Deine Kommentare sollen erklären warum etwas so gemacht wird und nicht, was gemacht wird.
    4. Es gibt eine bessere Fehlerüberprüfung als !, nämlich std::ifstream::fail, bzw std::ifstream::bad.
    5. Du brauchst std::string nicht mit "" zu initialisieren, das macht der default-ctor schon.
    6. "stringarray" ist ein falsch ausgesuchter Begriff, denn ein std::string ist im Prinzip schon ein Array.
    7. Ansonsten würde ich diese Methode vorziehen:

    std::string line;
    
    while(!file.eof())
    {
    	getline(file, line);
    
    	stringarray.push_back(line);
    
    	std::cout<< line <<std::endl;
    }
    


  • Kóyaánasqatsi schrieb:

    6. "stringarray" ist ein falsch ausgesuchter Begriff, denn ein std::string ist im Prinzip schon ein Array.

    stringarray ist ok, denn std::vectorstd::string ist genau das (mal abgesehen davon, dass man über den Begriff Vector / Array streiten kann).
    Was dabei std::string ist, kann dem Vektor ja egal sein.

    Edit:
    Zur Erklärung, warum exit(..) hier nicht angebracht ist:
    Bei exit(..) werden die Destruktoren von C++ Objekten nicht aufgerufen.

    Simon



  • Besser wäre aber StringVec (immernoch ih xD), StringBuffer oder einfach FileBuffer 😃



  • Vielen Dank! Funktioniert bestens!


Anmelden zum Antworten