Bonjour et bienvenue à nouveau.
Dans cette conférence, je vais faire une démonstration de notre défi précédent,
qui consiste à imprimer le contenu d'un fichier dans l'ordre inverse.
Vous allez donc avoir besoin de comprendre la méthode ftel et la méthode fseek.
Faisons apparaître des blocs de code et créons un nouveau projet.
Et ce projet sera une application console.
Nous allons simplement
nommer le contenu du fichier d'impression
à l'envers.
Et nous allons d'abord créer notre fichier qui contient des données vides parce que nous
avons besoin de lire à partir de celui-ci. Je vais donc retourner dans mon répertoire de téléchargements, où
se trouvent mes projets de blocs de code.
Et je vais aller au projet
que je
viens de créer, qui s'appelle le contenu du fichier d'impression.
Donc c'est juste ici. Je vais juste créer un nouveau fichier, un fichier texte.
Nous dirons un nouveau document texte. Nous l'appellerons test. texte.
Et puis à l'intérieur ici, je vais juste
faire la chose normale
salut mon nom est Jason, comment vas-tu, je vais bien.
Et ce que cela va faire, je vais le sauvegarder, puis nous allons commencer à imprimer la fin.
Il devrait donc afficher enif space gniod et ainsi de suite jusqu'à ce qu'il arrive au début.
Nous reviendrons donc aux blocs de code, et
nous allons devoir inclure notre IO standard
car il contient toutes nos fonctions. Nous allons créer
une constante, dans ce cas définir.
Et cela s'appellera le nom du fichier, cela s'appellera test. texte.
Et je vais d'abord devoir créer mon pointeur de fichier, donc tout en majuscules
FILE star fp, et je vais définir cela égal à null, l'initialiser.
Et puis je vais également créer quelques compteurs
et quelque chose pour représenter ce qui est retourné - je vais
porter le compteur pour ma
boucle, puis le nombre d'octets réels renvoyés par ftell.
Je vais donc dire que le compte est égal à zéro, puis
une variable de contrôle de boucle dans I est égale à zéro.
Je vais faire mon travail normal. J'ai besoin d'ouvrir mon dossier. Je vais dire que fp est
égal à fopen, et je vais passer le nom du fichier. Je vais passer en lecture seule donc juste r.
Je vais m'assurer que ce n'est pas nul. Je vais donc dire si fp est égal à null,
alors je vais simplement renvoyer un 1 négatif.
Sinon, je vais chercher la fin du fichier.
Alors je veux faire un fseek.
Ici, je vais appeler la fonction fseek.
Cela va changer la position de l'endroit où je pointe. Je vais passer mon pointeur de fichier.
Je vais passer à zéro pour notre deuxième paramètre.
Pour le troisième paramètre, je vais dire chercher jusqu'au bout.
Je vais donc utiliser cette fin de recherche constante.
Et cela va placer mon pointeur de fichier à la fin de fp,
qui est test. texte.
Une fois que je suis à la fin, je veux régler mon compteur
réel sur ce qu'il pointe est ftell. Alors je veux revenir là où je suis.
Donc, ici, je vais obtenir la position du pointeur de fichier.
Et le fseek a en fait changé la
position, de sorte qu'il déplace le pointeur de fichier à la fin du fichier.
Alors je le déplace d'abord et ensuite j'obtiens la position. Je peux obtenir la position en utilisant ftell.
Pour ftell, il renvoie la position, donc cela va être stocké dans count et
je vais dire f count est égal à f tell, puis le passer dans le pointeur de fichier.
Une fois que j'ai la position, je peux alors écrire une boucle
while qui dit aller de la position ou du compteur qui est ma variable de contrôle de boucle jusqu'à la fin.
Donc ici, je peux dire que je ne compte pas parce que
je veux essentiellement tout lire de la fin au début.
Et donc à l'intérieur ici, je veux dire incrémenter ma variable I.
Et puis je veux chercher, je veux changer là où je vais. Donc, je veux dire fseek, et
je veux pointer vers fp.
Je veux pointer vers un je négatif parce que
je vais du début au début, et je veux dire chercher la fin.
Si négatif, je vais être tellement d'octets à partir de la fin.
J'ai donc d'abord pu passer à la fin
et ensuite je veux changer de position pour pouvoir commencer à lire dans chaque caractère.
Une fois que j'ai vraiment cherché la fin, je peux
simplement imprimer le personnage, le
lire et l'imprimer. Donc, ici, je peux simplement
dire pourcentage c, puis je peux dire fgetc et
mon pointeur de fichier.
Donc, encore une fois, ce que je fais ici est à la ligne 22 ou à la ligne 19,
d'abord, je déplace mon pointeur vers la fin.
Ensuite, je reçois mon compteur car cela me dira combien de temps je dois lire dans chaque
octet en utilisant ftell.
Ensuite, ma boucle while va passer de zéro à
compter, combien d'octets je veux lire.
À la ligne 26, je vais incrémenter le compteur.
Je vais ensuite chercher le nombre d'octets à partir de la fin, qui
est moins I à partir de la fin. Et puis les lignes 28, je vais lire ce caractère et l'imprimer.
Et c'est la logique principale du programme.
La seule autre chose que je dois faire est que je veux imprimer un saut de ligne à la
fin, juste pour le rendre plus facile à lire. Je veux fermer mon pointeur de fichier.
Donc, je veux dire fp, puis je veux juste revenir,
et je veux probablement définir fp égal à null.
Essayons donc de compiler ceci, et ce que nous allons
voir, espérons-le, est l'impression du fichier dans l'ordre inverse.
Nous ne changeons pas le contenu du
fichier, nous le lisons simplement de la fin au début en utilisant nos fonctions de position.
Ainsi, lorsque nous exécutons cela, nous devrions voir
l'ordre inverse ou inverse. Et donc ce que vous remarquerez ici, c'est que nous voyons l'ordre inverse.
Nous imprimons donc d'abord le dernier fichier.
Et si nous mettons ce fichier dans notre répertoire de
téléchargement, vous
remarquerez qu'il est imprimé en sortie.
Il imprime enif
space gniod et ainsi de suite.
La dernière ligne imprimée est Salut, je m'appelle Jason à l'envers.
C'est donc juste un petit programme sympa
qui utilisera les pointeurs de fichier pour commencer à la
fin, puis reviendra au début et imprimera le contenu dans l'ordre inverse.
Alors remarquez comment nous utilisons fseek, remarquez comment nous utilisons ftell.
Fseek déplace le pointeur de fichier, ftell obtient réellement où vous
vous trouvez à l'emplacement du fichier.
Alors maintenant, vous pouvez utiliser le décompte pour aller en sens inverse.
Et là encore, utilisez le négatif I pour dire combien d'octets à partir de la fin
et fgetc avec un pointeur de fichier.
Je vais fournir ce code source comme solution, et vous pourrez le comparer, le
regarder et l'analyser plus en détail. J'espère que cela a aidé. Merci.