Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Dateien/2D-Vektoren(rückwärts einlesen) (http://www.informatikerboard.de/board/thread.php?threadid=4004)


Geschrieben von beta258 am 04.09.2018 um 02:23:

  Dateien/2D-Vektoren(rückwärts einlesen)

a
bc1
de232z

Ausdruck von datei.txt.

Wie schreibt man ein Programm, dass diese Datei rückwärts einliest und auf dem Bildschirm ausgibt..

Wäre für eure Hilfe sehr dankbar smile



Geschrieben von as_string am 04.09.2018 um 14:46:

 

Zeilenweise oder Zeichenweise?
Welche Programmiersprache, Betriebssystem, etc. Wie groß sind die Dateien typischerweise? Bei kleinen Dateien macht es vielleicht Sinn, die ganze Datei in einem Rutsch in normaler Richtung einzulesen, aber dann nur rückwärts auszugeben. Bei sehr großen Dateien eher nicht.
Was hat das mit 2D-Vektoren zu tun?

Ich finde, wenn man schon will, dass einem andere Leute helfen, könnte man sich bei der Fragestellung auch etwas mehr Mühe geben, wenn ich ehrlich bin...

Gruß
Marco



Geschrieben von beta258 am 04.09.2018 um 18:18:

 

Also es bezog sich auf Dateien, die als Ströme realisiert werden.
Und die Programmiersprache ist C++..

Sry, habe vergessen zu erwähnen, dass sich das Kapitel auf 2D Vektoren/Dateien bezog, die Aufgabe nur auf die Datei(-ströme) betraf.



Geschrieben von as_string am 05.09.2018 um 12:21:

 

Welches Buch? Kannst Du mal die Aufgabe komplett im Original-Wortlaut wiedergeben?
Du hast mir nicht verraten, ob es denn nun Zeilen- oder Zeichenweise rumgedreht werden soll, etc. Aber vielleicht würde es klarer werden, wenn Du einfach die komplette Aufgabe wörtlich zitieren könntest.

Gruß
Marco



Geschrieben von beta258 am 06.09.2018 um 11:42:

 

Zitat:
Original von as_string
Welches Buch? Kannst Du mal die Aufgabe komplett im Original-Wortlaut wiedergeben?
Du hast mir nicht verraten, ob es denn nun Zeilen- oder Zeichenweise rumgedreht werden soll, etc. Aber vielleicht würde es klarer werden, wenn Du einfach die komplette Aufgabe wörtlich zitieren könntest.

Gruß
Marco


a
bc1
de232z

zeigt den Ausdruck von Datei daten.txt
Schreiben Sie ein Programm, dass die Datei rückwärts einliest und auf
dem Bildschirm ausgibt.


Ist aus einem Skript... Soll ich dir das zusenden?



Geschrieben von user684 am 09.09.2018 um 07:16:

 

???



Geschrieben von beta258 am 12.09.2018 um 06:02:

smile

Das war der originale Wortlaut! Kannst du mir bitte helfen?



Geschrieben von as_string am 12.09.2018 um 11:58:

 

Ich hab immer noch nicht verstanden, was eigentlich raus kommen soll.
Soll das Ergebnis dann so aussehen:
code:
1:
2:
3:
4:
5:
de232z
bc1
a

oder so:
code:
1:
2:
3:
4:
5:
z232ed
1cb
a

Ersteres wäre zeilenweise umgedreht, letzteres zeichenweise.
Und nochmal zu meinem Lösungsansatz: Bei kleinen Dateien würde man die ganze Datei trotzdem komplett von vorne einlesen und nur die Ausgabe rückwärts machen. Das ist viel schneller, als in der Datei immer einen Schritt rückwärts gehen zu müssen. Bei größeren Dateien würde man das dann wahrscheinlich blockweise machen, um den Hauptspeicher nicht übermäßig zu belegen.
Aber anscheinend ist das hier nicht die gewünschte Lösung. Wenn die Datei zeichenweise rückwärts ausgegeben gelesen werden soll, hätte ich das hier schnell zusammen gehackt (Vorsicht: Ich fange keine Fehler ab und es kann sein, dass es nicht die optimale/sinnvollste Lösung ist! Ich programmiere seit Jahren nicht mehr in C++, bin da nicht so im "Training")
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
#include <iostream>
#include <fstream>

int main() {
    std::ifstream file("test.txt", std::ios::binary | std::ios::ate);
    while(file.tellg() > 0) {
        file.seekg(-1, std::ios_base::cur);
        int c = file.peek();
        if(c > 0) {
            std::cout << (char) c;
        }
    }
    file.close();
    return 0;
}


Wichtig dabei: Das ios::ate steht für: Springe ans Ende (at end) beim Öffnen.

Gruß
Marco


Forensoftware: Burning Board, entwickelt von WoltLab GmbH