Ich habe eine Datei und ich möchte nur die letzte Zeile an die Konsole ausgeben.Suche nach Zeichen vom Ende der Datei mit seekg() C++
Hier sind meine Gedanken darüber, wie ich es tun würde. Verwenden Sie file.seekg(0, ios::end)
, um mich am Ende der Datei zu setzen.
Dann könnte ich eine Dekrementvariable int decrement = -1;
erstellen und verwenden Sie eine while-Schleife
while (joke.peek() != '\n')
{
decrement--;
}
und die Ausgangsposition für meine letzte Zeile erhalten (rückwärts vom Ende).
Mit diesem Wissen, joke.seekg(decrement, ios::end);
soll mich zu Beginn der letzten Zeile gesetzt, und unter der Voraussetzung, erklärte ich vorher string input;
Ich würde denken, dass
getline(joke, input);
cout << input << endl;
ausgeben würde es an die Konsole.
Voll Code
void displayLastLine(ifstream &joke)
{
string input;
int decrement = -1;
joke.clear();
joke.seekg(0, ios::end);
while (joke.peek() != '\n')
{
decrement--;
}
joke.clear();
joke.seekg(decrement, ios::end);
getline(joke, input);
cout << input << endl;
}
Das Problem ist, wenn ich diese Methode für die Datei gehen zu nennen, geschieht nichts. Wenn ich es durchtrete, wird das Dekrement einfach weiter subtrahiert, weit darüber hinaus, wo ein '\n'
wäre. Um ein Beispiel für eine Textdatei zu geben, würde es in etwa so aussehen:
Junk
Müll
überspringen Sie diese Zeile
Das ist die Linie, die wir suchen!
Fast alle Ihre Punkte sind gültig. Ich beginne jedoch mit meiner Suche bei -1 und starte damit meine Suche mit dem NEXT zum letzten Zeichen. – Podo
Ich werde auch in Zukunft meine Gummiente konsultieren, bevor ich nach SO komme. – Podo
Ich muss meine Augen überprüfen lassen, sorry. Ich schwor, ich sah 'joke.seekg (0, ios :: end);' im Code, mit einer großen fetten Null drin, und nicht -1. Und, -1 hätte den Dateizeiger auf das letzte Zeichen in der Datei gesetzt, nicht auf das vorletzte Zeichen. –