Text dateien an richtiger stelle auslesen



  • Ja bin anfänger deshalb brauch ich ein bsp.



  • Nix da, Zeigerarithmetik.

    'fgets' ist C. Verwende die C++-Dateiströme, dann kannst Du mit der Funktion 'std::getline' (aus dem Header <string>) arbeiten, die macht das, was Du willst, wenn Du ihr einen Extra-Parameter übergibst:

    // …
    using namespace std;
    ifstream ifs("Meine-Datei.txt");
    
    string s;
    getline(ifs, s, '*'); // Liest bis zum Sternchen.
    getline(ifs, s);      // Liest bis zum Zeilenende.
    


  • ok danke und wie spring ich von zeile zu zeile ????



  • Massiv schrieb:

    ok danke und wie spring ich von zeile zu zeile ????

    Sowas geht in Dateien nicht. Es bleibt Dir nur übrig, mit der von mir gezeigten Methode solange Zeilen auszulesen, bis Du die gewünschte gefunden hast.



  • nehmen wir also an ich les war raus aus der textdatei will es aber oben abspeichern das heist ich muss den stream schliessen und neu aufmachen oder? und wenn ja verschieben sicxh die zeilen dann oder werden sie überschrieben??



  • hmm du kannst auch seeken ... aber dann muss die Datei auch zum lesen und schreib offen sein.



  • ein bsp bitte





  • lies mal alles in einen string ein, dannach kannst du auch zwischen a und b herumhüpfen (ungetestet):

    #include <iostream>
    #include <fstream>
    
    int main()
    {
         std::string buf;
         std::ifstream is("C:\\abc.txt");
         if(!is.is_open())
            return 1;
    
         std::getline(is, buf, static_cast<char>(EOF));
         is.close();
         std::cout<<buf<<std::endl;
         std::cin.ignore(2, '\n');
         return 0;
    }
    


  • weiteres beispiel:

    #include<iostream>
    #include<fstream>
    #include<cstdlib>
    
    using namespace std;
    
    int main() {
        ifstream einIfstream;
        if(!einIfstream.is_open())  // is_open ausprobieren
           einIfstream.open("seek.dat", ios::binary|ios::in);
        einIfstream.seekg(9);              // absolute Leseposition
        char c;
        einIfstream.get(c);                // get schaltet Pos. weiter
        cout << c << " an Position 9 gefunden\n";
        // 2 relativ zur aktuellen Position (10) weiterbewegen
        einIfstream.seekg(2, ios::cur);
        ios::pos_type position = einIfstream.tellg();
        einIfstream.get(c);
        cout << c << " an Position 12 gefunden\n";
        einIfstream.seekg(-4, ios::end);  // 4 Positionen vor dem Ende
        einIfstream.get(c);
        cout << c << " an der viertletzten Position gefunden\n";
        einIfstream.seekg(position, ios::beg);  // an alte Position (12) gehen
        einIfstream.get(c);
        cout << c << " an Position 12 gefunden\n";
    }
    

    Quelle: C++-Buch von breymann


Anmelden zum Antworten