Datei von hinten nach vorne lesen



  • Hm ja das wäre eine möglichkteit aber ich kann nicht davon ausgehen..



  • Mit einem Reverse-Iterator ist es leichter.
    Du kannst natürlich den Dateizeiger zum lesen an die letzte Position-1 (um vor das letzte Zeichen zu kommen) setzen und dann lesen und das machst du dann die ganze Zeit, immer wieder zurück, lesen...Oder Zeilenweise auslesen ginge auch, musst nur nach einem \n für den Zeilenumbruch immer suchen...

    Code-Hacker



  • Code-Hacker das wollte ich eben vermeiden den dateizeiger immer selbst zu setzen und zeilenweise geht auch nicht weil ich keine txt oder sowas hab.



  • Warum kannst du denn sie nicht von vorne einlesen ?

    Devil



  • Bufferoverflow schrieb:

    Code-Hacker das wollte ich eben vermeiden den dateizeiger immer selbst zu setzen und zeilenweise geht auch nicht weil ich keine txt oder sowas hab.

    Was ist daran so schlimm den zu setzen? Wenn du es vermeiden willst und der Reverse-Iterator auch nicht das ist was du suchst, glaube ich ist das nicht zu realisieren, wüsste nicht wie du rückwärts lesen kannst.

    Code-Hacker



  • devi81: ich hab am ende der datei werte von beliebiger länge stehn, die von hinten gesehn bis zu einem bestimmtem steuerzeichen gehen. Von vorne gesehn kann das steuerzeichen aber mehrmals vorkommen.

    Code-Hacker: es ist einfach bequemer. Dachte das ich blos irgendwas übersehen habe und das ganze mit zb einem flag getan wäre. Ich hatte in erinnerung irgendsowas mal gehört/gelesen zu haben aber wahrschenlich ist es wirklich nicht so einfach möglich...



  • Naja, mit einem Flag isses zwar nicht getan, aber ich finde der Aufwand hält sich doch in Grenzen. Hab mal was ausprobiert, vielleicht hilfts dir ja:

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main()
    {
        char zeichen=0;
        ifstream file("test.txt");
        int pos = -1;
    
        file.seekg(pos, ios::end);
    
        while(file.get(zeichen))
        {
            cout << zeichen;
            pos--;
            file.seekg(pos, ios::end);
        }
        cout << endl;
    }
    


  • reverseiterator oder die Datei auf einen Haps einlesen und dann im speicher suchen....



  • Jep Danke CarstenJ was anderes bleibt mir bleibt mir dann ja kaum übrig, da die dateien zu groß für den speicher sein könnten, und auserdem wär das sonst speicherverschwendung in meinen augen :p



  • CarstenJ ich glaub das dies die beste Möglichkeit ist. Hab mal irgendwo gehört das häufiges wegseln der Position in einer Datei sehr langsam ist. Also wenn du nur nach dem Byte mit einem bestimmten Wert suchst dann könntest du auch das hier versuchen:

    ifstream in(...);
    char c;
    int pos=0;
    int found=-1;
    
    while(in>>c)
    {
        if(c==':')
             found=pos;
        pos++;
    }
    

    Ist natürlich nicht ideal wenn deine Variable klein ist. Als Aternative könntest du auch das letzte kb einlesen und dann mit einem Reverse-Iterator ran. Fals dein Zeichen nicht gefunden, das 2 letzte kb lesen, etc


Anmelden zum Antworten