std::ifstream - Positionszeiger auf bestimmte Zeile setzen



  • Hallo,
    ich möchte von einer Datei bestimmte Zeilen einlesen. Zum Beispiel erst die Zeile 3 dann die Zeile 15. Nun weiß ich zwar, dass ich mit seekg() den Positionszeiger verändern kann, jedoch kann ich da nur exakt die Zeichen angeben aber nicht die Zeilen. Da die Zeilen aber unterschiedliche Längen haben, weiß ich jetzt nicht wie ich das anstellen soll.



  • Wer suchet, der findet.



  • Du musst wohl bis zu deiner letzten gewünschten Zeile lesen. (Und halt die '\n' zählen.)



  • Ok, ich habe mit jetzt eine kleine Funktion geschrieben, die immer zur nächsten Zeile springt.

    void NextLine(std::ifstream& ifs) {
    	static int lastLine = ifs.beg;
    	ifs.seekg(lastLine);
    	ifs.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    	lastLine = ifs.tellg();
    }
    

    Allerdings habe ich jetzt ein anderes Problem, ich möchte, dass alle Sonderzeichen im Text ignoriert werden. Da ignore() aber immer nur das erste Sonderzeichen, was die Funktion findet ignoriert und nicht alle, weiß ich jetzt nicht was ich machen soll.
    Muss ich den Text erst wirklich vorher Zeichen für Zeichen vorgehen, und jedes Sonderzeichen löschen, was ich finde oder gibt es da eine elegantere, vielleicht auch schnellere, Methode.

    314159265358979 schrieb:

    Wer suchet, der findet.

    🙄 Wenn ich bei google schon was gefunden hätte, hätte ich hier nichts gepostet. Allerdings kenne ich keinen kurzen Suchbegriff, bei dem mir google das liefert was ich will und nicht irgendwas anderes, was mit filestreams zu tun hat.


  • Mod

    Filefinder schrieb:

    Allerdings habe ich jetzt ein anderes Problem, ich möchte, dass alle Sonderzeichen im Text ignoriert werden. Da ignore() aber immer nur das erste Sonderzeichen, was die Funktion findet ignoriert und nicht alle, weiß ich jetzt nicht was ich machen soll.
    Muss ich den Text erst wirklich vorher Zeichen für Zeichen vorgehen, und jedes Sonderzeichen löschen, was ich finde oder gibt es da eine elegantere, vielleicht auch schnellere, Methode.

    Egal wie elegant du es hinschreibst (in der Standardbibliothek gibt es ein paar Algorithmen dafür, oder auch ein eigener Filter für den Stream wäre machbar), letztendlich muss die gleiche Arbeit gemacht werden und dies beinhaltet das angucken jedes Zeichens, wenn du das erste finden möchtest, das kein Sonderzeichen ist. Wie willst du das sonst anstellen? Daher werden auch alle Methoden ungefähr gleich schnell sein.

    314159265358979 schrieb:

    Wer suchet, der findet.

    🙄 Wenn ich bei google schon was gefunden hätte, hätte ich hier nichts gepostet. Allerdings kenne ich keinen kurzen Suchbegriff, bei dem mir google das liefert was ich will und nicht irgendwas anderes, was mit filestreams zu tun hat.

    Hier in der Forensuche sollte das eigentlich gleich mehrfach auftauchen. Mal probieren... 😮 Hmm, da bin ich selber überrascht, denn ich finde gerade ebenfalls nichts.



  • SeppJ schrieb:

    Hier in der Forensuche sollte das eigentlich gleich mehrfach auftauchen. Mal probieren... 😮 Hmm, da bin ich selber überrascht, denn ich finde gerade ebenfalls nichts.

    Hängt natürlich auch davon ab, was man sucht ... meinst Du diesen Thread 'Textfile ab Zeile x einlesen'.

    Gruß
    Werner


Anmelden zum Antworten