Hallo und willkommen zurück.
In diesem Vortrag möchte ich um darüber
zu sprechen, wie wir Text aus einer Datei lesen können.
Im Moment werden wir Konzentrieren Sie sich auf das Lesen von Textdateien.
Also, wenn wir Zeichen lesen wollen Aus einer Textdatei werden
wir einige Funktionen verwenden.
Zuerst wird man fgetc sein.
Dadurch wird ein Zeichen aus einem Text gelesen Datei, die zum Lesen geöffnet wurde.
Denken Sie daran, wir müssen immer öffnen Aktualisieren Sie die Datei, bevor Sie
Dateivorgänge ausführen können, es sei denn Es ist ein Umbenennen oder Löschen
und dann kann die Datei nicht geöffnet werden.
Aber wenn Sie lesen wollen und beim Schreiben oder Anhängen
müssen wir diese Datei öffnen.
Wir wissen, dass wir uns öffnen können Dateien mit verschiedenen Modi.
In diesem Fall hätten wir zum Lesen um mit einem r oder einem r plus
zu öffnen, und dann können wir anfangen, fgetc aufzurufen.
Die fgetc-Funktion benötigt Der Dateizeiger ist das einzige
Argument und wird zurückgegeben das als Typ int gelesene Zeichen.
Also hier ein Beispiel, wir erstellen einen mchar Geben Sie int ein und wir sagen fgetc pfile.
Es wird einen Charakter lesen in die Variable mchar mit
pfile als Dateizeiger.
Denken Sie an pfile schon gewesen geöffnete Rückkehr zum Dateizeiger.
Der mchar ist vom Typ in weil eof was
unser Sonderzeichen unser Dateiende ist, wird zurückgegeben wenn Das Dateiende wurde erreicht.
Das können wir also immer überprüfen Ganzzahl, um zu sehen, ob es eof ist.
Und wenn ja, wollen wir nicht um mehr
zu lesen, wollen wir fgetc nicht mehr aufrufen.
Die Funktion fgetc, die ist äquivalent zu fgetc ist ebenfalls verfügbar.
Getc ist also fast das gleiche wie fgetc, du willst nur fgetc verwenden.
Ich denke, es hat einige mehr Schutz darin.
Bei getc ist ein Argument erforderlich vom Typ file star und gibt das Zeichen rot
als Typ int zurück und gibt es zurück.
Es ist praktisch identisch mit fgetc.
Der einzige Unterschied zwischen ihnen ist, dass getc als Makro implementiert werden
kann und wir nicht einmal weiß, was ein Makro jetzt ist.
Also bleiben wir bei Verwenden von fgetc als unsere Funktion zum
Lesen von Zeichen.
Sie können den Inhalt einer Datei lesen.
Auch hier können Sie bei Bedarf verwenden Diese Rückspulfunktion positioniert die von der
Datei angegebene Datei Zeiger auf den Anfang der Datei.
Sie können also den Rücklauf verwenden, wenn du willst nochmal lesen
Sagen Sie einfach zurückspulen und dann die Dateizeiger, ziemlich einfach.
Hier ist ein Beispiel.
Sie müssen die einschließen Standard-Io-Header, wenn
wir Dateivorgänge ausführen.
In unserer Hauptfunktion sind wir Wir werden unseren Dateizeiger erstellen.
Wenn ich dies auf null initialisieren möchte und wir werden eine ganze Zahl erstellen.
Das erste, was wir tun werden, ist, dass wir es tun Öffnen
Sie die Datei mit dem Aufruf f open, und geben Sie an den Namen der Datei und wir werden angeben,
dass es zum Lesen ist.
Das gibt unseren Dateizeiger zurück.
Also jetzt ist unser fp Zeiger auf eine gültige Datei verweisen.
Wenn die Datei nicht geöffnet werden konnte. TXT Das ist nicht auf dem
richtigen Weg oder was auch immer, es wird null zurückgeben.
Sie möchten also nach null suchen. Stellen Sie sicher, dass fp nicht null ist.
Wenn es null ist, beenden Sie das Programm.
Ansonsten, wenn Sie normalerweise Wenn Sie Zeichen lesen, werden Sie sie
in einer Schleife haben.
Also hier sagen wir, während c gleich fgetc fp, dies liest ein Zeichen
aus unserer Datei, Übergabe des Dateizeigers an fgetc, das eine
Ganzzahl zurückgibt.
Denken Sie daran, wir können aus der Schleife springen Wenn diese zurückgegebene Ganzzahl das Ende der Datei
ist, weil wir nicht wollen nach dem Ende der Datei zu lesen.
Ansonsten können wir einfach ausdrucken unser Charakter mit Prozent c und c.
Das Letzte, was wir tun wollen, sind wir Wenn Sie die Datei schließen möchten, möchten
Sie dann unseren Dateizeiger setzen auf null, und wir können zurückkehren.
Lassen Sie uns versuchen, dies zu nutzen und zu schaffen dies innerhalb von Codeblöcken.
Hier ist unser Programm in Codeblöcken.
Es heißt, dieses Programm wird nicht funktionieren, es sei denn, wir haben eine Datei auf der Festplatte, wo
immer das Programm ausgeführt wird.
Also zuerst, wenn wir das bauen, es sollte in Ordnung sein,
es sollte eine ausführbare Datei erstellen irgendwo auf Ihrer Festplatte.
Ich habe alle meine Projekte gestellt in meinem Dot Loans Verzeichnis.
Also, wenn ich zu meinen Downloads gehe Verzeichnis und ich
gehe zum Projektnamen, der nur ein Test ist Projekt also, wo immer Sie Ihre Projekte speichern,
ist Mine im Test.
Wenn ich zum Testen gehe, wirst du sehen dass innerhalb des bin-Verzeichnisses, innerhalb des
Debugs Ihre ausführbare Datei ist.
Hier erstellen Sie Ihre Datei, wenn Sie einen Verwandten hatten.
Pfad also hier könnte ich einfach einen erstellen neue Datei und wir können es als Textdatei haben, so
dass ich es einfach als Text erstellen kann Dokument, und es muss Datei benannt werden.
Und dann werde ich setzen einige Informationen darin.
Ich werde nur einige Daten eingeben wie hi das ist Jason Line Feed.
Okay, nein, so weiter, und ich werde es retten.
Diese Datei muss in vorhanden sein damit dieses Programm funktioniert.
Also habe ich die Datei erstellt.
Nun, wenn ich es laufen lasse, hoffentlich Es liest, was ich gerade
hinzugefügt habe, und druckt es aus.
Es heißt Fehler und Datei öffnen Datei kein solches
Dateiverzeichnis, und das liegt wahrscheinlich daran, dass ich Habe es im Debug-Ordner.
Und dies läuft nicht im Debug.
Versuchen wir es also im Debug und Ich denke, es würde jetzt wahrscheinlich funktionieren.
Wir können Debuggen sagen, starten.
Dies sucht nach der ausführbaren Datei hoffentlich im Debug-Verzeichnis.
Wir wollen sicherstellen, dass es läuft.
Immer noch nicht da, also musst du machen Sicher wissen Sie, wo sich die ausführbare Datei befindet.
Lass es uns woanders versuchen oder Besser noch, ich könnte einfach die ausführbare Datei im
Debug ausführen Verzeichnis und sollte es dort finden.
Also, wenn ich hier doppelklicke, es pausiert eigentlich nicht.
Es springt heraus.
Was Sie dafür tun können, ist
Anstatt zurückzukehren, können Sie sagen, dass das System pausiert und nicht beendet wird das Programm, bis Sie es ausgeführt haben.
Also lass es uns jetzt versuchen.
Also jetzt angehalten, nicht wahr? Führen Sie das Programm aus.
Und was du gesehen hast war, Hallo, das ist Jason.
Es konnte die Datei finden, okay ausgedruckt, nein ausgedruckt
und dann pausiert es.
Andernfalls, wenn Sie ausführen Das Programm druckt die Daten so schnell
und beendet das Programm, dass Sie fertig sind.
So können Sie es testen.
Es muss dort gespeichert werden, wo die ausführbare Datei wird dort gespeichert, wo es ausgeführt wird.
Es muss von irgendwoher laufen sonst in Ihrem Projektverzeichnis.
Ich bin mir nicht sicher, woher es kommt.
Wir könnten versuchen, die Datei zu verschieben dorthin, wo sich der Quellcode befindet.
Es könnte von hier aus ausgeführt werden.
Also hier setzen wir es hier ein.
Und jetzt werden wir versuchen, es auszuführen die ID und vielleicht wird es funktionieren.
Wir bauen nicht.
Wir führen es und es konnte es finden.
Es sieht also so aus, als hätten wir um die Datei dort abzulegen, wo sich
der Quellcode befindet.
So lange wir diese Datei ablegen Datei. Text in
der Projektdatei können Sie sehen.
So schnelles Beispiel, wie Sie können Öffnen Sie eine Datei und lesen Sie einzelne Zeichen,
die nicht die effizientesten sind Möglichkeit, aus einer Datei zu lesen, da
Sie normalerweise Zeichenfolgen lesen möchten.
Aber das wird es öffnen.
Sie sehen den offenen Anruf und Sie bemerken die while-Schleife.
Das ist wichtig.
Lass uns zurückgehen und darüber reden, wie Wir können Zeichenfolgen aus einer Datei lesen,
die viel effizienter ist.
Das heißt also, ein einzelnes Zeichen zu lesen.
Wie wäre es mit einem String?
Sie können die Funktion fgets verwenden aus einer beliebigen Datei oder einem Stream zu lesen.
Dies liest eine Zeichenfolge.
Es braucht eine Zeichenkette hat den ersten Parameter.
Die Anzahl der Zeichen, die Sie möchten Lesen und dann den eigentlichen Dateizeiger.
Also diese Funktion wird Lesen Sie eine Zeichenfolge in dem Speicherbereich,
auf den die Zeichenfolge zeigt.
Also muss man eigentlich Übergeben Sie den Puffer, in
dem die Daten gespeichert werden sollen.
Und das ist ein Zeiger, also würdest du müssen Speicher dafür zuweisen.
Und dann wird es lesen Die Datei, die als dritter Parameter angegeben
wurde und der Dateizeiger ist.
Und dann geht der Nchar um zu sagen, wie viele Daten gelesen werden sollen.
Wenn Sie also nchars wie 10 setzen, Es werden 10 Zeichen eingelesen, es sei
denn, es trifft zuerst einen Zeilenvorschub.
Also wird es entweder eine lesen ganze Zeile oder es wird die Anzahl der
Zeichen lesen, die Sie Geben Sie im zweiten Parameter an.
Das Zeilenende wird durch das angegeben Backslash n je nachdem, was zuerst eintritt.
Wenn ein Zeilenumbruch rot ist, Es wird in der Zeichenfolge
beibehalten und ein Null-Terminator wird verwendet an das Ende der Zeichenfolge angehängt.
Also, wenn Sie tatsächlich angegeben haben mehr Zeichen, würde es bis zum Zeilenvorschub
lesen, und dann springe raus und dann bekommt
es das neue Linienzeichen und setzt ein Nullzeichen am Ende.
Wenn es keinen Fehler gibt, ist fgets wird den Zeiger zurückgeben,
der der erste Parameter ist.
Es wird einen Zeiger zurückgeben, der wird von der Funktion zurückgegeben.
Und dann geht es auch noch um den str-Zeiger als
ersten Parameter zu füllen.
Wenn ein Fehler vorliegt, wird null zurückgegeben.
Und dann das Ende der Datei lesen bewirkt, dass null zurückgegeben wird, dh
Sie lesen alle Ihre Zeichenfolgen.
Schauen wir uns also ein Beispiel an.
Hier haben wir unsere Haupt- und Wir erstellen unseren Dateizeiger und
erstellen eine Zeichenfolge.
Hier ist dies ein Zeiger, den wir nicht haben Wenn Sie Daten dafür lokalisieren, erstellen
Sie einfach ein Zeichenarray.
Wir öffnen die Datei zum Lesen, Lesen nur, weil es r ist.
Wir sagten, wenn es null ist, springen Sie raus.
Ansonsten sagen wir nur fgets, Wir lesen in 60 Zeichen.
Oder wenn der Zeilenvorschub vorher ist dass ein Zeilenvorschub angezeigt
wird und dieser dann ausgedruckt wird und was auch immer im str puffer ist.
Also ist str das zuerst Charakter, der übergeben wurde.
Und dann schließen wir den Dateizeiger, Setzen Sie es auf Null und geben Sie Null zurück.
Schauen wir uns das noch einmal an Dies innerhalb unseres Codes blockiert die IDE.
Das einzige, was sich daran geändert hat Programm ist wirklich Zeilen 14 bis 17.
Wir verwenden Fgets, um unsere Zeichenfolge zu lesen in, und dann haben wir einen str-Puffer.
Also müssen wir auch eine erstellen Zeichenarray
hier oben, das ist unsere str, und wir wollen, dass dies 60 enthält.
Wir lesen in 60.
Wir werden einen Zeilenvorschub hinzufügen, also ist es Lesen Sie 59 ein und fügen Sie am Ende
einen Zeilenvorschub hinzu.
Wir könnten also 61 sagen.
Und dann werden die Fgets drin sein eine if-Anweisung, und sie
wird jede Zeichenfolge einlesen, bis sie es auch tut trifft 60 Zeichen oder eine neue Zeile, und
diese Zeichenfolge wird ausgedruckt.
Sie werden feststellen, dass dies nicht der Fall ist eine while-Schleife, damit wir
nicht bis zum Ende der Datei lesen.
Wir lesen das Ende von Datei erhalten wir eine Null.
Also, wenn wir das bauen, wollen wir machen Sicher haben wir unsere Zitate richtig.
Wann immer Sie von Powerpoint kopieren es bringt die Zitate durcheinander.
Und wir wollen sicher gehen Wir haben unsere Variable erstellt. c wird nicht verwendet. Das
ist in Ordnung.
Also lasst uns weitermachen und das ausführen.
Und du siehst, das ist Jason.
Also tatsächlich in einem Ganzen lesen Textzeile aus der Datei.
Es las in der ersten Zeile.
Also würden Sie es wieder anrufen und in der zweiten Zeile lesen.
Wenn Sie die Anzahl der Bytes ändern Lesen Sie, sagen Sie, wir
wollen nur 10 lesen, es würde in 10 lesen und dann würde diese
10 zurückgeben, anstatt die gesamte Zeile zu lesen.
Also hier haben wir es einfach in diesem Ich.
Also wird es in Zahlen lesen von Zeichen
Ihr zweiter Parameter oder bis es eine Zeile bekommt füttern und es speichert das in str.
Str ist ein Zeichenarray.
Wir drucken es aus.
Fgets ist viel mehr effizient zum Lesen.
Weil wir nicht lesen ein Charakter und zu einer
Zeit lesen wir mehr Daten ein.
Lesen eines Zeichens in a Zeit ist nicht so effizient.
Jetzt wissen wir also, wie man Single liest Zeichen, wir wissen,
wie man Zeichenfolgen liest, bis sie eine neue lesen Zeile oder eine Anzahl von Zeichen.
Sie können aber auch einlesen formatierte Eingabe aus einer Datei.
Also haben wir getc, fgetc, fgets.
Und jetzt haben wir noch einen Funktion namens fscanf.
Dies ist eine formatierte Eingabe.
Bei der formatierten Eingabe werden Daten angegeben by like hat ein Trennzeichen
oder ein bestimmtes Format.
Diese fscanf-Funktion nimmt eine Datei auf aus Stream und dann ein Format.
Das Format ist genau wie beim printf Formatbezeichner, die Sie verwenden.
Also, wenn Sie ganze Zahlen einlesen möchten oder doppelt können Sie Daten in der
Datei angeben, die eingeführt werden im Doppel
und es wird das lesen, bis es wie genau wie der scanf sieht bis es ein Leerzeichen sieht.
Also das erste Argument zum fscanf Funktion ist ein Zeiger auf ein
Dateiobjekt, das den Stream identifiziert.
Wir müssen wissen was Datei, aus der wir lesen.
Das zweite Argument zum Funktion ist das Format.
Dies ist eine c-Zeichenfolge, die enthält eines oder mehrere der folgenden Elemente.
Leerzeichen, kein Leerzeichen Zeichen, Formatbezeichner.
Die Verwendung ist die gleiche wie die scanf und das in der printf, aber stattdessen
ist es aus einer Datei.
Innerhalb der doppelten Anführungszeichen können Sie also In Text können Sie Leerzeichen
oder Nicht-Leerzeichen einfügen, aber Die Formatspezifizierer sind wirklich, wie
Sie die Daten einlesen werden.
Und dann geben Sie Variablen an dass Sie es lesen wollen.
Die Funktion kehrt also zurück Die Anzahl
der Eingabeelemente, die erfolgreich abgeglichen und zugewiesen wurden.
So sieht es also aus.
Sie werden feststellen, dass die Haupt ist Erstellen von drei Zeichenarrays, str1, str2
und str3, jeweils nur zehn Bytes.
Wir erstellen eine Ganzzahl namens Jahr haben wir einen Dateizeiger getroffen.
Das erste was wir machen Wir öffnen die Datei.
In diesem Fall öffnen wir es zum Lesen und Schreiben.
Aber wir werden nicht wirklich schreiben Alles, was dazu gehört, wir werden nur
anzeigen, was wir daraus lesen.
Wir überprüfen, ob die Datei vorhanden ist Zeiger ist nicht gleich null.
Und dann sind wir hier tatsächlich etwas in die Datei fputs setzen.
Darüber haben wir noch nicht gesprochen, aber das schreibt etwas.
Konzentrieren Sie sich hier auf den fscanf.
Der fscanf wird formatierte Daten einlesen.
Und was wird es tun? wird es in
drei durch Leerzeichen getrennten Zeichenfolgen lesen.
Und so sehen Sie den Prozentsatz als Raumprozentsatz als
Raumprozentsatz s Raumprozentsatz d.
Dann sagen wir, wo wir sind Ich werde sie in unser
Array mit drei Zeichen und dann in unser Array einlesen Jahr, und wir müssen
den Adressoperator für unser Jahr angeben.
Die Daten sind jedoch a formatiert bestimmte Art und Weise, wenn es geschrieben ist.
Und wenn Sie etwas einlesen, das ist formatiert müssen Sie das Format der
Datei verstehen, wie sie geschrieben ist.
Hier wissen wir, dass die Datei geschrieben ist durch Trennen von Zeichenfolgen durch Leerzeichen.
So sind wir also werde es einlesen.
Und so können wir es lesen mit einem Anruf fscanf.
Wir können unser Formular als Bezeichner verwenden als unser zweites Argument und dann
variable Anzahl von Argumenten für jedes getrennt von jedem Komma, um die Daten anzugeben, in
die wir sie einlesen möchten.
Und dann drucken wir das einfach aus Daten, die drei Zeichenfolgen im Jahr und
dann wieder schließen wir die Datei.
Das sind also die drei Möglichkeiten Sie können Daten aus einer Datei einlesen.
Sie können entweder Zeichen einlesen, Sie können Zeichenfolgen einlesen oder
formatierte Daten lesen.
Und Sie werden den formatierten Weg bemerken es ist sehr ähnlich zu scanf.
Sie verwenden Formatbezeichner, Variablen zum Einlesen.
Wir werden eine Herausforderung haben Lesen von Daten, mit denen Sie
sich besser vertraut machen.
Es ist ziemlich einfach.
Du wirst dein Open machen Anrufe, Sie werden
Ihre Dateizeiger verwenden und Sie werden gehen diese drei Funktionen zu verwenden.
Vielen Dank.