getline auf fstream vom ende aus



  • hi,

    gibt es eine standard methode um eine Datei Zeilenweise von hinten her auszulesen oder muss ich die selbst implementieren?

    bsp:

    Datei inp.txt

    erste Zeile
    zweite Zeile
    dritte Zeile
    

    gewünschtes verhalten:

    //ifstream in öffnen usw.
    string first,last;
    getline_reverse(in,first);
    getline_reverse(in,last);
    
    cout<<first<<", "<<last<<endl;//Ausgabe: erste Zeile, dritte Zeile
    


  • Ich kenn keine und ich würde mal behaupten wollen, dass du besser kommen würdest, die datei ganz normal zeilenweise einzulesen in nen vector und den dann rückwärst ausgibst oder was auch immer du damit vorhast...

    bb


  • Administrator

    Wie unskilled es sagt. Und einen std::vector kannst du ganz einfach von hinten nach vorne durchlaufen mit einem reverse_iterator .
    Sowas wäre aber natürlich theoretisch schon möglich. Du kannst mit std::ios::ate den Positionszeiger des Streams auf das Ende vom File setzen. Und danach suchst du einfach selber rückwärts durch das File nach Line Feeds. Wohl immer mit seekg zwei Stellen zurück, eine lesen, zwei stellen zurück, eine lesen usw.
    Aber ob das effizienter ist, als einfach alle Zeilen in einen std::vector zu lesen und dann rückwärts zu behandeln, da habe ich gewisse Zweifel 😉
    Vor allem aber wäre es nicht einfacher :p

    Grüssli


Anmelden zum Antworten