C++ Datei auslesen



  • Folgendes Problem ich soll aus einer Datei (.txt)
    eine bestimmte Zeile auslesen und in ein array speichern

    hab zwar schon google befragt aber irgendwie fühl ich mich nicht schlauer.....

    für C hab ich was gefunden
    http://openbook.galileocomputing.de/c_von_a_bis_z/016_c_ein_ausgabe_funktionen_016.htm#mjcea47bd6d32a4a8f51be329a672845d7

    muss es aber in C++ programmieren.

    z.B.

    test.txt
    sadfs
    sdfsg
    sg
    sd
    gsgdsgh
    gk
    gk
    k

    also gib mir zeile 3 aus => sg

    danke im voraus



  • Und wie lautet dein bisheriger Ansatz?
    Irgendwas wirst du ja sicherlich schon programmiert haben?
    Datei öffnen - irgendwas auslesen etc.



  • google ma nach ifstream



  • bisheriger ansatz war folgender der gibt mir aber alles wieder ......

    // Zeilenweise Auslesen
    void lineOutput ( ifstream& stream ) {
       char buffer[512];
       int cnt=1;
       while( stream.getline( buffer, sizeof(buffer)) ) {
          if( stream.fail() ) {
             cout << "Unerwarteter Lesefehler!" << endl;
             break;
          }
          cout << cnt++ << " : " << buffer << endl;
       }
       cout << endl;           
    }
    


  • Da du in jedem Schleifendurchgang die gelesene Zeile ausgibst ist es klar, dass du den gesamten Dateiinhalt siehst.
    Du bräuchtest also eine Zählvariable, die bei jedem Durchlauf um eins erhöht wird. Diese repräsentiert dann die bereits gelesenen Zeilen.

    Dann wäre es hilfreich, wenn die Funktion einen weiteren Parameter erhält. Du möchtest ja angeben, welche Zeile du auslesen möchtest.
    Innerhalb der Schleife wird dann deine Zählvariable mit dem übergebenen Argument verglichen.

    Beispielsweise:

    std::string lineOutput (std::istream& stream, int linenumber) {
    	if (linenumber < 1)
    		return "Ungueltige Zeilennummer";
    	std::string line;
    
    	for (int actualline = 0; stream && actualline!=linenumber; ++actualline) 
    		std::getline(stream,line);
    	return stream ? line : "Ungueltige Zeilennummer";
    }
    

    Hier wird übrigens getline aus dem string-header verwendet, da ich ungern mit char-buffern arbeite wenn es nicht notwendig ist (somit ist es egal wie lang die Zeilen sind).

    P.S. natürlich kannst du auch eine while schleife verwenden. Dann allerdings nicht vergessen innerhalb der Schleife die Zählvariable zu inkrementieren.



  • Wie willst du auf den Ansatz gekommen sein, wenn du jetzt nicht mal in if hinbekommst?


Anmelden zum Antworten