Hallo und willkommen zurück.
In dieser Vorlesung werde ich eine Demonstration für unsere vorherige Herausforderung geben,
bei der der Inhalt einer Datei in umgekehrter Reihenfolge gedruckt wird.
Sie müssen also die ftel-Methode und die fseek-Methode verstehen.
Lassen Sie uns Codeblöcke aufrufen und ein neues Projekt erstellen.
Und dieses Projekt wird eine Konsolenanwendung sein.
Wir nennen es
einfach den Inhalt der Druckdatei in
umgekehrter Reihenfolge.
Und wir werden zuerst unsere Datei erstellen, die einige leere Daten
enthält, weil wir daraus lesen müssen. Also gehe ich zurück zu meinem Download-Verzeichnis,
in dem sich meine Codeblock-Projekte befinden.
Und ich gehe zu dem Projekt,
das ich
gerade erstellt habe und das den Namen der Druckdatei enthält.
Also ist es genau hier. Ich werde nur eine neue Datei erstellen, eine Textdatei.
Wir werden neues Textdokument sagen. Wir werden es Test nennen. Text.
Und dann mache ich hier drinnen einfach das
normale Hallo, mein Name
ist Jason, wie geht es dir, mir geht es gut.
Und was dies tun wird, werde ich speichern, und dann werden wir anfangen, das Ende auszudrucken.
Es sollte also enif space gniod usw. ausdrucken, bis es am Anfang ist.
Wir kehren also zu den Codeblöcken zurück und
müssen unsere Standard-E / A einbinden, da
diese alle unsere Funktionen enthält. Wir werden eine
Konstante erstellen, in diesem Fall definieren.
Und dies wird als Dateiname bezeichnet, es wird als Test bezeichnet. Text.
Und ich muss zuerst meinen Dateizeiger erstellen, also alle Großbuchstaben FILE star fp,
und ich werde diesen Wert auf null setzen und ihn initialisieren.
Und dann werde ich auch ein paar Zähler erstellen
und etwas, das darstellt, was zurückgegeben wird - ich werde den Zähler für
meine Schleife und dann die
Anzahl der tatsächlichen Bytes tragen, die von ftell zurückgegeben werden.
Also werde ich sagen, dass die Anzahl gleich Null ist
und dann eine Regelungsvariable in I gleich Null ist.
Ich werde mein normales tun. Ich muss meine Datei öffnen. Ich werde sagen, dass fp
gleich fopen ist, und ich werde den Dateinamen übergeben. Ich werde schreibgeschützt weitergeben, also nur r.
Ich werde sicherstellen, dass dies nicht null ist. Also werde ich sagen, wenn fp gleich null ist, dann
werde ich nur eine negative 1 zurückgeben.
Ansonsten werde ich bis zum Ende der Datei suchen.
Also möchte ich einen Fseek machen.
Hier werde ich die fseek-Funktion aufrufen.
Dies wird die Position ändern, auf die ich zeige. Ich werde meinen Dateizeiger übergeben.
Ich werde für unseren zweiten Parameter Null übergeben.
Für den dritten Parameter werde ich bis zum Ende suchen sagen.
Also werde ich dieses konstante Suchede nutzen.
Und das wird meinen Dateizeiger auf das Ende von fp setzen,
was test ist. Text.
Sobald ich am Ende bin, möchte ich meinen tatsächlichen Zähler auf das
setzen, worauf er zeigt, ist ftell. Also möchte ich zurück, wo ich bin.
Hier werde ich also die Position des Dateizeigers ermitteln.
Und der fseek hat tatsächlich die Position
geändert, sodass der Dateizeiger an das Ende der Datei verschoben wird.
Also bewege ich es zuerst und dann bekomme ich die Position. Ich kann die Position mit ftell bekommen.
Für ftell wird die Position zurückgegeben, sodass diese in count gespeichert wird, und
ich werde sagen, dass f count gleich f tell ist, und sie dann im Dateizeiger übergeben.
Sobald ich die Position habe, kann ich eine while-Schleife schreiben, die
sagt, dass ich von der Position oder dem Zähler, der ich meine Regelungsvariable bin, bis zum Ende gehen soll.
Hier kann ich also sagen, während ich weniger als gezählt bin, weil
ich im Grunde alles vom Ende bis zum Anfang einlesen möchte.
Und so möchte ich hier drinnen sagen, dass ich meine I-Variable inkrementiere.
Und dann möchte ich suchen, ich möchte ändern, wohin ich ziehe. Also möchte ich fseek sagen
und auf fp zeigen.
Ich möchte auf ein negatives Ich hinweisen, weil
ich von hinten nach Anfang gehe, und ich möchte sagen, suche Ende.
So negativ, dass ich vom Ende an so viele Bytes haben werde.
Also konnte ich mich zuerst bis zum Ende
bewegen und dann möchte ich meine Position ändern, damit ich anfangen kann, jedes Zeichen einzulesen.
Sobald ich tatsächlich bis zum Ende gesucht habe, kann ich
das Zeichen einfach ausdrucken,
lesen und ausdrucken. Hier kann ich also nur
Prozent c sagen, und dann kann ich fgetc
und meinen Dateizeiger sagen.
Also wieder, was ich hier mache, ist in Zeile 22 oder Zeile 19, zuerst
bewege ich meinen Zeiger zum Ende.
Dann bekomme ich meinen Zähler, weil das mir sagt, wie lange ich jedes Byte mit
ftell einlesen muss.
Dann geht meine while-Schleife von Null bis zum Zählen,
wie viele Bytes ich einlesen möchte.
In Zeile 26 werde ich den Zähler erhöhen.
Ich werde dann nach den so vielen Bytes vom Ende suchen,
was minus ich vom Ende ist. Und dann, Zeile 28, werde ich dieses Zeichen einlesen und ausdrucken.
Und das ist die Hauptlogik für das Programm.
Das einzige andere, was ich tun muss, ist, dass ich am Ende einen Zeilenvorschub
ausdrucken möchte, um das Lesen zu erleichtern. Ich möchte meinen Dateizeiger schließen.
Also möchte ich fp sagen, und dann möchte ich einfach
zurückkehren, und ich möchte wahrscheinlich fp gleich null setzen.
Versuchen wir also, dies zu kompilieren, und wir werden hoffentlich
sehen, dass die Datei in umgekehrter Reihenfolge gedruckt wird.
Wir ändern den Inhalt der Datei
nicht, sondern lesen sie nur mit unseren Positionsfunktionen vom Ende bis zum Anfang ein.
Wenn wir dies ausführen, sollten wir die entgegengesetzte
oder umgekehrte Reihenfolge sehen. Was Sie hier bemerken werden, ist, dass wir die umgekehrte Reihenfolge sehen.
Also drucken wir zuerst die letzte Datei aus.
Und wenn wir diese Datei in unserem Download-Verzeichnis aufrufen, werden
Sie feststellen,
dass sie als Ausgabe ausgedruckt wird.
Es druckt enif
space gniod und so weiter aus.
Die letzte Zeile, die ausgedruckt wird, ist Hallo, mein Name ist Jason in umgekehrter Reihenfolge.
Es ist also nur ein hübsches kleines Programm,
das die Dateizeiger verwendet, um am Ende zu beginnen und
dann zum Anfang zu gehen und den Inhalt in umgekehrter Reihenfolge auszudrucken.
Beachten Sie also, wie wir fseek verwenden, und beachten Sie, wie wir ftell verwenden.
Fseek bewegt den Dateizeiger, ftell kommt tatsächlich dahin, wo Sie
sich am Speicherort der Datei befinden.
Jetzt können Sie die Zählung verwenden, um in umgekehrter Reihenfolge vorzugehen.
Und dann verwenden Sie negative I, um zu sagen, wie viele Bytes vom
Ende und fgetc mit einem Dateizeiger.
Ich werde diesen Quellcode als Lösung bereitstellen, und Sie können ihn
vergleichen, betrachten und genauer analysieren. Hoffe das hat geholfen. Vielen Dank.