istream und zeilennummern



  • Storm13000 schrieb:

    Das heißt ich muss m Zeilen einlesen und kann mir dann meine gesuchte Zeile heraussuchen?
    Und gibt es eine Funktion die mir n gibt?

    Angenommen du willst die Zehnte Zeile in einem String speichern, und die erste Zeile habe den Index 0. Dann musst du Zeichen aus dem Stream extrahieren bis Zehn mal ein Zeilenumbruch (Escape-Sequenz '\n' ) vorkam:

    /// Du musst <limits> einbinden, und einen std::ifstream namens stream definieren
    
    int ct = 10;
    while( stream && ct--  )
        stream.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
    
    if( ct == 0 ) // Erfolgreich gelesen
        // Mach was, lies weiter ein o. ä.
    else
        // Fehlerbehandlung - Datei zu kurz(?)
    


  • Das ist leider nicht der Fall.

    Dankeschön!



  • und verwirst sie

    Meintest du "verwirfst"? Sonst wäre das eine ziemlich merkwürdige Personifikation der Zeilen 😃



  • Sone schrieb:

    und verwirst sie

    Meintest du "verwirfst"? Sonst wäre das eine ziemlich merkwürdige Personifikation der Zeilen 😃

    Ja, meinte, verwirfst . 😃



  • Storm13000 schrieb:

    Das ist leider nicht der Fall.

    Sondern, was willst du genau erreichen?



  • out schrieb:

    Storm13000 schrieb:

    Das ist leider nicht der Fall.

    Sondern, was willst du genau erreichen?

    Wahrscheinlich verneinte er nur Bellis Aussage wegen der gleich langen Zeilen.



  • Hab einen Moment gebraucht, bin aber zu demselben Schluss gekommen.



  • Belli schrieb:

    Hab einen Moment gebraucht, bin aber zu demselben Schluss gekommen.

    😕 wovon redest du?
    (Ich meinte mit meinem Beitrag oben, dass er verneint hat dass seine Datei gleich lange Zeilen hat)



  • Falls du öfters auf Zeilen zugreifen musst, solltest du sie am Besten alle einlesen:

    #include <fstream>
    #include <string>
    #include <vector>
    
    using namespace std;
    int main()
    {
    
        vector<string> lines;
        {
            string cur;
            ifstream file("file.txt");
            while(getline(file, cur))
                lines.push_back(move(cur));
        }    
    
        string line12 = lines.at(12);
    }
    


  • Sone schrieb:

    (Ich meinte mit meinem Beitrag oben, dass er verneint hat dass seine Datei gleich lange Zeilen hat)

    Ich bin zu demselben Schluss gekommen, aber erst nach einem Moment der Verunsicherung, weil Dein Posting zwischen meins und sein gerutscht ist.



  • out schrieb:

    Storm13000 schrieb:

    Das ist leider nicht der Fall.

    Sondern, was willst du genau erreichen?

    Damit habe ich mich auf die Frage ob alle Zeilen gleichlang sind bezogen.



  • Ich werde

    #include <fstream> 
    #include <string> 
    #include <vector> 
    
    using namespace std; 
    int main() 
    { 
    
        vector<string> lines; 
        { 
            string cur; 
            ifstream file("file.txt"); 
            while(getline(file, cur)) 
                lines.push_back(move(cur)); 
        }     
    
        string line12 = lines.at(12); 
    }
    

    mal ausprobieren, da ich alle Zeilen benötige, aber immer nur auf einige zugreifen muss.

    Vielen Dank!


Anmelden zum Antworten