Text dateien an richtiger stelle auslesen



  • Hallo hab ne frage ich will spezielle Zeilen auslesen sagen wir ich hab ein Programm und speicher bestimmte parameter in eine txt datei. das kann ich auslesen geht auch aber nur von oben nach unten zb

    Textdatei:
    a=6;
    b=8;
    c=99;

    also les ich b aus kann ich nicht wieder zu a
    und gibt es eine Befehlszeile die einen string ausliest bis zu einem bestimmten punkt also wie bei fgets(eingang,200,stream) wo man eine zahl reinschreiben kann oder es solange macht bis ein eingabevorschub nur hier soll dann die begrenzung sagen wir ein (*) sternchen sein bzw nächste Zeile wenn ja bitte ein bsp geben.

    ich mach das so:
    char text[80];
    fgets(eingabe,200,stream);
    x=0;
    while(eingabe[x]!='*'){
    text[x]=eingabe[x];}
    text[x]='/0'; // binäre null das zeichen kann auch andersrum sein k.A

    Vielen Dank im Voraus



  • Stichwort: Zeigerarithmetik 😕

    Grüße, NewProggie



  • 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


Log in to reply