Bonjour et bienvenue à nouveau.
Dans cette conférence, j'aimerais pour parler de la
façon dont nous pouvons lire du texte à partir d'un fichier.
Pour l'instant, nous allons concentrez-vous sur la lecture de fichiers texte.
Donc si nous voulons lire le caractère à partir d'un fichier texte,
nous allons utiliser quelques fonctions.
Le premier va être fgetc.
Cela lira un caractère d'un texte fichier qui a été ouvert en lecture.
Rappelez-vous, nous devons toujours ouvrir le fichier avant que nous puissions effectuer des opérations
sur celui-ci à moins que c'est un changement de nom ou une suppression
et le fichier ne peut pas être ouvert.
Mais si tu veux faire de la lecture et en écrivant ou
en ajoutant, nous devons ouvrir ce fichier.
Nous savons que nous pouvons ouvrir fichiers avec différents modes.
Dans ce cas pour la lecture, nous aurions pour ouvrir avec un r ou un
r plus, puis nous pouvons commencer à appeler fgetc.
La fonction fgetc prend le pointeur de fichier comme
seul argument, et il retournera le caractère lu comme type int.
Alors voici un exemple, nous créons un mchar tapez int, et nous disons fgetc pfile.
Ça va lire un personnage dans la variable mchar avec pfile
comme pointeur de fichier.
Pensez à pfile déjà été ouvert retour au pointeur de fichier.
Le mchar est de type car e de qui est notre caractère
spécial notre fin de fichier, qui est retourné si la fin du fichier est atteinte.
Donc on peut toujours vérifier ça entier pour voir si c'est eof.
Et si c'est le cas, nous ne voulons pas
pour lire plus, nous ne voulons plus appeler fgetc.
La fonction fgetc, qui est équivalent à fgetc est également disponible.
Donc, getc est presque le même que fgetc, vous voulez juste utiliser fgetc.
Je pense qu'il y en a plus de protection dedans.
Avec getc, il nécessite un argument de type file star et retourne et
renvoie le caractère rouge comme type int.
C'est pratiquement identique à fgetc.
La seule différence entre eux est que getc peut être implémenté en tant
que macro, et nous ne savoir ce qu'est une macro maintenant.
Alors nous allons rester avec en utilisant fgetc comme fonction pour
lire les caractères.
Vous pouvez lire le contenu d'un fichier.
Encore une fois, si nécessaire, vous pouvez utiliser cette fonction de rembobinage qui positionne le
fichier spécifié par le fichier pointeur vers le début du fichier.
Vous pouvez donc utiliser le rembobinage si vous voulez relire.
Dites simplement rembobiner et ensuite le pointeur de fichier, assez basique.
Voici donc un exemple.
Vous devez inclure le en-tête io standard chaque fois que
nous faisons des opérations sur les fichiers.
Dans notre fonction principale, nous va créer notre pointeur de fichier.
Si je veux initialiser ceci à null et nous allons créer un entier.
La première chose que nous allons faire est que nous va
ouvrir le fichier en utilisant l'appel f open, et nous allons spécifier le nom du fichier et nous allons
préciser qu'il est en lecture.
Cela renverra notre pointeur de fichier.
Alors maintenant, notre pointeur fp est pointant vers un fichier valide.
S'il n'a pas pu ouvrir le fichier. SMS ce n'est pas dans le
bon chemin ou quoi que ce soit, ça va retourner null.
Donc, vous voulez vérifier la valeur nulle, assurez-vous que fp n'est pas nul.
S'il est nul, quittez le programme.
Sinon, lorsque vous lisez des caractères, vous allez les avoir
dans une boucle.
Donc ici nous disons alors que c équivaut à fgetc fp, c'est la lecture d'un caractère
de notre fichier, en passant le pointeur de fichier vers fgetc, qui
renvoie un entier.
Rappelez-vous, nous pouvons sauter hors de la boucle si cet entier renvoyé est la fin du fichier parce que
nous ne voulons pas pour lire au-delà de la fin du fichier.
Sinon, nous pouvons simplement imprimer notre personnage en utilisant pour cent c et c.
La dernière chose que nous voulons faire, c'est nous voulez fermer le fichier, nous voulons
ensuite définir notre pointeur de fichier à null, et nous pouvons revenir.
Essayons d'utiliser ceci, créant ceci à l'intérieur de blocs de code.
Voici notre programme à l'intérieur des blocs de code.
Il dit que ce programme ne va pas fonctionne à moins que nous ayons un fichier sur le disque partout où
le programme est en cours d'exécution.
Donc d'abord si nous construisons ceci, il devrait bien se construire, il
devrait créer un exécutable quelque part sur votre disque dur.
J'ai mis tous mes projets dans mon répertoire de prêts dot.
Donc si je vais à mes téléchargements répertoire et je vais
au nom du projet, qui n'est qu'un test projet, donc où que vous stockiez vos projets, les
miens sont en test.
Si je vais tester, tu verras que dans le répertoire bin, à l'intérieur de
debug se trouve votre exécutable.
C'est ici que vous créez votre fichier si vous aviez un parent.
Chemin donc ici, je pourrais simplement créer un nouveau fichier et nous pouvons l'avoir sous forme de fichier texte afin
que je puisse simplement le créer sous forme de texte document, et il doit être nommé fichier.
Et puis je vais mettre quelques informations dedans.
Je vais juste mettre quelques données comme salut c'est le saut de ligne de Jason.
Ok, non, ainsi de suite, et je vais le sauver.
Ce fichier doit exister dans pour que ce programme fonctionne.
J'ai donc créé le fichier.
Maintenant, quand je le lance, j'espère il lira ce que
je viens d'y ajouter et l'imprimera.
Il dit erreur et ouverture de fichier file pas de tel répertoire
de fichiers, et c'est probablement parce que je l'avoir dans le dossier de débogage.
Et cela ne fonctionne pas dans le débogage.
Alors essayons de l'exécuter en débogage, et Je pense que cela fonctionnerait probablement maintenant.
Nous pouvons dire déboguer, commencer.
Cela cherchera l'exécutable dans le répertoire de débogage, espérons-le.
Nous voulons nous assurer qu'il est exécuté.
Toujours pas là, donc tu dois faire sûr que vous savez où se trouve l'exécutable.
Essayons ailleurs ou mieux encore, je pourrais simplement exécuter l'exécutable dans le
débogage répertoire et devrait le trouver là-bas.
Donc si je double-clique ici, en fait, il ne s'arrête pas.
Il saute.
Donc, ce que vous pouvez faire pour cela,
c'est au lieu de revenir, vous pouvez dire que le système est en pause et il ne quittera pas le programme jusqu'à ce que vous l'ayez exécuté.
Alors essayons maintenant.
Alors maintenant mis en pause, n'est-ce pas exécutez le programme.
Et ce que tu as vu était, salut c'est Jason.
Il a pu trouver le fichier, imprimé bien, imprimé non et
puis il a fait une pause.
Sinon, lorsque vous exécutez le programme, il imprime les données si
rapidement et quitte le programme que vous avez terminé.
Voilà comment vous pouvez le tester.
Il doit être stocké là où l'exécutable est stocké là où il s'exécute.
Il doit fuir quelque part else dans le répertoire de votre projet.
Je ne sais pas d'où ça vient.
Nous pourrions essayer de déplacer le fichier à l'endroit où se trouve le code source.
Il pourrait le faire fonctionner à partir d'ici.
Alors ici, nous allons le mettre ici.
Et maintenant, nous allons essayer de l'exécuter à partir de l'ID et peut-être que cela fonctionnera.
Nous ne construisons pas.
Nous l'avons géré et il a pu le trouver.
On dirait donc que nous avons pour placer le fichier à l'intérieur de l'emplacement
du code source.
Donc tant que nous mettons ce fichier déposer. texte à l'intérieur du
fichier de projet, vous pourrez le voir.
Un exemple si rapide de la façon dont vous pouvez ouvrir un fichier et lire des caractères uniques,
ce n'est pas le plus efficace façon de lire à partir d'un fichier parce que
vous voulez généralement lire des chaînes.
Mais cela l'ouvrira.
Vous voyez l'appel ouvert, et vous remarquez la boucle while.
C'est important.
Revenons en arrière et parlons de la façon dont nous pouvons lire des chaînes à partir d'un
fichier qui est beaucoup plus efficace.
Donc, c'est lire un seul caractère.
Que diriez-vous de lire une chaîne?
Vous pouvez utiliser la fonction fgets pour lire à partir de n'importe quel fichier ou flux.
Cela lira une chaîne.
Il faut une chaîne de caractères a le premier paramètre.
Le nombre de caractères que vous souhaitez read, puis le pointeur de fichier réel.
Donc, cette fonction va lire une chaîne dans la zone
mémoire pointée par le str.
Donc tu dois en fait passez dans le tampon
où les données vont être stockées.
Et c'est un indicateur, donc vous doivent lui allouer de la mémoire.
Et puis ça va lire à partir de le fichier spécifié comme troisième paramètre
qui est le pointeur de fichier.
Et puis le nchar va pour dire combien de données lire.
Donc, si vous mettez nchars comme 10, il va lire en 10 caractères à moins qu'il
ne frappe d'abord un saut de ligne.
Donc il va soit lire un ligne entière ou il va lire le nombre
de caractères que vous spécifiez dans le deuxième paramètre.
La fin de ligne est spécifiée par le barre oblique inverse n selon la première éventualité.
Si un caractère de nouvelle ligne est rouge, il est conservé dans
la chaîne et un terminateur nul sera ajouté à la fin de la chaîne.
Donc, si vous avez réellement spécifié plus de caractères, il lit jusqu'au saut de ligne,
puis sauter et puis il obtient ce nouveau caractère de
ligne et met un caractère nul à la fin de celui-ci.
S'il n'y a pas d'erreur, fgets est va retourner le pointeur,
qui est le premier paramètre.
Il va renvoyer un pointeur qui est renvoyé par la fonction.
Et puis ça va aussi pour remplir le pointeur
str comme premier paramètre.
S'il y a une erreur, nul est renvoyé.
Et puis lire la fin du fichier provoque le renvoi de null, ce qui signifie
que vous lisez toutes vos chaînes.
Alors regardons un exemple.
Ici, nous avons notre principal, et nous créons notre pointeur de fichier en créant
une chaîne de caractères.
Voici un indicateur que nous n'avons pas mallocate toutes les données pour cela, nous créons
juste un tableau de caractères.
Nous ouvrons le fichier pour la lecture, lecture uniquement parce que c'est r.
Nous avons dit que si c'est nul, sautez.
Sinon, on dit juste fgets, on lit en 60 caractères.
Ou si le saut de ligne est avant cela, un
saut de ligne apparaîtra, puis il l'imprimera et quoi de jamais dans le tampon str.
Alors str est-ce le premier caractère qui est passé.
Et puis nous fermons le pointeur de fichier, définissez-le sur null et renvoyez zéro.
Alors, encore une fois, jetons un œil à ceci à l'intérieur de nos blocs de code IDE.
La seule chose qui a changé dans ce programme est en réalité les lignes 14 à 17.
Nous utilisons des fgets pour lire notre chaîne in, et puis nous avons un tampon str.
Nous devons donc également créer un tableau
de caractères ici qui est notre str, et nous voulons qu'il contienne 60.
Nous lisons dans 60.
Nous allons ajouter un saut de ligne, donc c'est allez lire en 59, puis ajoutez un saut de ligne à
la fin de celui-ci.
On pourrait donc dire 61.
Et puis les fgets vont être dans une instruction if, et elle
va lire dans chaque chaîne jusqu'à ce qu'elle soit frappe 60 caractères ou une nouvelle ligne, et il
va imprimer cette chaîne.
Vous remarquerez que ce n'est pas une boucle while, donc nous ne
lisons pas jusqu'à la fin du fichier.
Nous lisons la fin de file, nous obtenons un null.
Donc si nous construisons ceci, nous voulons faire sûr que nous avons nos citations correctement.
Chaque fois que vous copiez à partir de PowerPoint ça gâche les citations.
Et nous voulons nous assurer nous avons créé notre variable c n'est pas utilisée ce
n'est pas grave.
Alors allons-y et exécutons ceci.
Et tu vois, c'est Jason.
Donc en fait lu dans un entier ligne de texte du fichier.
Il a lu dans la première ligne.
Alors tu l'appellerais à nouveau et lisez dans la deuxième ligne.
Si vous modifiez le nombre d'octets lire, disons que nous
voulons juste lire 10, cela lirait 10 et ensuite renverrait ces 10
au lieu de lire la ligne entière.
Alors ici, nous l'avons juste salut ce moi
Alors ça va lire en nombre de caractères
votre deuxième paramètre ou jusqu'à ce qu'il obtienne une ligne feed et il stocke cela dans str.
Str est un tableau de caractères.
Nous l'imprimons fgets.
Fgets c'est bien plus efficace pour la lecture.
Parce que nous ne lisons pas un personnage et à
la fois, nous lisons plus de données.
Lire un personnage dans un le temps n'est pas aussi efficace.
Alors maintenant on sait lire en single caractères, nous savons lire
dans les chaînes jusqu'à ce qu'ils lisent un nouveau ligne ou un certain nombre de caractères.
Mais vous pouvez aussi lire entrée formatée à partir d'un fichier.
Nous avons donc getc, fgetc, fgets.
Et maintenant nous en avons un autre fonction appelée fscanf.
Il s'agit d'une entrée formatée.
L'entrée formatée est des données spécifiées by like a un délimiteur ou un format
spécifique lui est associé.
Cette fonction fscanf prend un fichier à partir du flux, puis un format.
Le format est comme le printf spécificateurs de format que vous utilisez.
Donc si vous voulez lire en nombres entiers ou double, vous pouvez spécifier les données
à l'intérieur du fichier qui sont introduites en
double et il lira cela jusqu'à ce qu'il voie comme le scanf jusqu'à ce qu'il voit un caractère d'espacement.
Donc, le premier argument du fscanf function est un pointeur vers un objet
fichier qui identifie le flux.
Nous devons savoir quoi fichier que nous lisons.
Le deuxième argument de la la fonction est le format.
Ceci est une chaîne C qui contient un ou plusieurs des éléments suivants.
Caractère d'espace blanc, sans espace caractère, spécificateurs de format.
L'utilisation est la même que celle du scanf et le dans le printf, mais à
la place il s'agit d'un fichier.
Donc, à l'intérieur des guillemets, vous pouvez mettre du texte, vous pouvez insérer des espaces ou
des caractères non blancs, mais les spécificateurs de format sont vraiment la façon
dont vous allez lire les données.
Et puis vous spécifiez des variables dans lequel vous souhaitez le lire.
Donc la fonction retourne le nombre
d'éléments d'entrée correctement mis en correspondance et attribués.
Alors, voici à quoi ça ressemble.
Vous remarquerez que le principal est création de trois tableaux de caractères, str1, str2 et
str3, à seulement dix octets chacun.
Nous créons un entier appelé année, nous avons frappé un pointeur de fichier.
La première chose que nous faisons nous ouvrons le fichier.
Dans ce cas, nous ouvrons pour lire et écrire.
Mais nous n'allons pas vraiment écrire quoi que ce soit, nous allons simplement afficher
ce que nous en lisons.
Nous vérifions pour nous assurer que le fichier Le pointeur n'est pas égal à null.
Et puis ici, nous sommes en fait mettre quelque chose dans le fichier fputs.
Nous n'en avons pas encore parlé, mais c'est écrire quelque chose.
Concentrez-vous ici sur le fscanf.
Le fscanf va lire dans des données formatées.
Et alors qu'est-ce que ça va faire va-t-il lire
en trois chaînes séparées par des espaces.
Et donc vous voyez le pourcentage en pourcentage d'espace en pourcentage d'espace
s espace pour cent d.
Ensuite, nous disons où nous sommes va les lire dans
notre tableau de trois caractères, puis notre année, et nous devons spécifier
l'opérateur d'adresse pour notre année.
Mais les données sont formatées manière spécifique quand il est écrit.
Et quand tu lis quelque chose qui formaté, vous devez comprendre le format
du fichier comme il est écrit.
Ici, nous savons que le fichier est écrit en séparant les chaînes par des espaces.
Alors c'est comme ça que nous sommes va le lire.
Et pour que nous puissions le lire en un seul appel fscanf.
Nous pouvons utiliser notre formulaire comme spécificateurs comme deuxième argument, puis nombre
variable d'arguments pour chacun séparé de chaque virgule pour spécifier les données dans lesquelles
nous voulons le lire.
Et puis nous imprimons juste ça données, les trois chaînes dans l'année et puis
à nouveau nous fermons le fichier.
Et donc ce sont les trois façons vous pouvez lire les données d'un fichier.
Vous pouvez soit lire en caractères, vous pouvez lire des chaînes ou vous
pouvez lire des données formatées.
Et vous remarquerez la manière formatée de le faire est très similaire à scanf.
Vous utilisez des spécificateurs de format, variables à lire.
Nous aurons un défi sur lire des données qui vous permettront de mieux
vous familiariser avec cela.
C'est assez basique.
Tu vas faire ton ouverture appels, vous allez utiliser
vos pointeurs de fichiers et vous partez pour utiliser ces trois fonctions.
Merci.