Ruby Datei-Eingabe und -Ausgabe
Ruby bietet einen vollständigen Satz von I/O-bezogenen Methoden, die im Kernel-Modul implementiert sind. Alle I/O-Methoden stammen von der IO-Klasse ab.
KlasseIOBietet alle grundlegenden Methoden wieread, write, gets, puts, readline, getcundprintf。
Dieses Kapitel erläutert alle grundlegenden I/O-Funktionen, die in Ruby verfügbar sind. Weitere Funktionen finden Sie in RubysIO-Klasse.
putsAnweisung
In den vorherigen Kapiteln haben Sie Variablen Werte zugewiesen und dann dieputsAnweisung verwendet, um Ausgaben auszugeben.
putsDie Anweisung weist das Programm an, den in der Variablen gespeicherten Wert anzuzeigen. Dadurch wird am Ende jeder Zeile ein Zeilenumbruch hinzugefügt.
Beispiel
Die Ausgabe des obigen Beispiels ist:
This is variable one This is variable two
getsAnweisung
getsDie Anweisung kann verwendet werden, um Benutzereingaben von der Standardeingabe namens STDIN zu erhalten.
Beispiel
Der folgende Code demonstriert die Verwendung der gets-Anweisung. Dieser Code fordert den Benutzer auf, einen Wert einzugeben. Der Wert wird in der Variablen val gespeichert und schließlich auf STDOUT ausgegeben.
Beispiel
Die Ausgabe des obigen Beispiels ist:
Enter a value : This is entered value This is entered value
putcAnweisung
andputsIm Gegensatz zur Anweisung,putsgibt die Anweisung die gesamte Zeichenkette auf dem Bildschirm aus, währendputcDie Anweisung kann verwendet werden, um ein Zeichen auszugeben
Beispiel
Die Ausgabe des folgenden Codes ist nur das Zeichen H:
Beispiel
Die Ausgabe des obigen Beispiels ist:
H
printAnweisung
printDie Anweisung ähnelt derputsAnweisung. Der einzige Unterschied besteht darin, dassputsdie Anweisung nach der Ausgabe von Inhalt in die nächste Zeile springt, während bei Verwendung derprintAnweisung wird der Cursor in derselben Zeile positioniert.
Beispiel
Die Ausgabe des obigen Beispiels ist:
Hello WorldGood Morning
Dateien öffnen und schließen
Bisher haben Sie aus der Standardeingabe gelesen und in die Standardausgabe geschrieben. Jetzt werden wir sehen, wie man mit echten Datendateien arbeitet.
File.newMethode
Sie können dieFile.newMethode verwenden, um einFileObjekt zum Lesen, Schreiben oder beides zu erstellen, abhängig vom Modusparameter. Schließlich können Sie dieFile.closeMethode zum Schließen der Datei.
Syntax
File.openMethode
Sie können dieFile.openMethode verwenden, um ein neues Dateiobjekt zu erstellen und dieses Dateiobjekt einer Datei zuzuweisen. Jedoch,File.openundFile.newEs gibt einen kleinen Unterschied zwischen den Methoden. Der Unterschied besteht darin, dassFile.opendie Methode mit einem Block verknüpft werden kann, währendFile.newdie Methode das nicht kann.
Die folgende Tabelle listet die verschiedenen Modi zum Öffnen von Dateien auf:
| Mode | Beschreibung |
|---|---|
| r | Nur-Lese-Modus. Der Dateizeiger wird an den Anfang der Datei gesetzt. Dies ist der Standardmodus. |
| r+ | Lese-/Schreibmodus. Der Dateizeiger wird an den Anfang der Datei gesetzt. |
| w | Nur-Schreib-Modus. Wenn die Datei existiert, wird sie überschrieben. Wenn die Datei nicht existiert, wird eine neue Datei zum Schreiben erstellt. |
| w+ | Lese-/Schreibmodus. Wenn die Datei existiert, wird die vorhandene Datei überschrieben. Wenn die Datei nicht existiert, wird eine neue Datei zum Lesen und Schreiben erstellt. |
| a | Nur-Schreibmodus. Wenn die Datei existiert, wird der Dateizeiger an das Ende der Datei gesetzt. Das heißt, die Datei befindet sich im Anhängemodus. Wenn die Datei nicht existiert, wird eine neue Datei zum Schreiben erstellt. |
| a+ | Lese-/Schreibmodus. Wenn die Datei existiert, wird der Dateizeiger an das Ende der Datei gesetzt. Das heißt, die Datei befindet sich im Anhängemodus. Wenn die Datei nicht existiert, wird eine neue Datei zum Lesen und Schreiben erstellt. |
Dateien lesen und schreiben
Methoden, die für einfache E/A verwendet werden, können auch mit allen Dateiobjekten verwendet werden. So liest gets eine Zeile von der Standardeingabe,aFile.getsund liest eine Zeile aus dem Dateiobjekt aFile.
Allerdings bieten E/A-Objekte zusätzliche Einstellungen für Zugriffsmethoden, was uns zugutekommt.
sysreadMethode
Sie können die Methodesysreadverwenden, um den Inhalt einer Datei zu lesen. Wenn Sie die Methode sysread verwenden, können Sie die Datei in einem beliebigen Modus öffnen. Zum Beispiel:
Es folgt die Eingabetextdatei:
This is a simple text file for testing purpose.
Nun versuchen wir, diese Datei zu lesen:
Beispiel
Diese Anweisung liest die ersten 20 Zeichen der Eingabedatei. Der Dateizeiger wird an die Position des 21. Zeichens in der Datei gesetzt.
syswriteMethode
Sie können die Methodesyswriteverwenden, um Inhalt in eine Datei zu schreiben. Wenn Sie die syswrite-Methode verwenden, müssen Sie die Datei im Schreibmodus öffnen. Zum Beispiel:
Beispiel
Diese Anweisung schreibt "ABCDEF" in die Datei.
each_byteMethode
Diese Methode gehört zur KlasseFile. Die Methodeeach_byteist ein Iterator, der über jedes Zeichen in einer Zeichenkette iteriert. Betrachten Sie das folgende Codebeispiel:
Beispiel
Die Zeichen werden einzeln an die Variable ch übergeben und dann auf dem Bildschirm angezeigt, wie unten dargestellt:
A.B.C.D.E.F.s. .a. .s.i.m.p.l.e. .t.e.x.t. .f.i.l.e. .f.o.r. .t.e.s.t.i.n.g. .p.u.r.p.o.s.e...
IO.readlinesMethode
KlasseFileist eine Unterklasse der IO-Klasse. Die IO-Klasse hat auch einige Methoden zur Manipulation von Dateien.
IO.readlinesist eine Methode in der IO-Klasse. Diese Methode gibt den Inhalt der Datei Zeile für Zeile zurück. Der folgende Code zeigt die Verwendung der MethodeIO.readlines:
Beispiel
In diesem Code ist die Variable arr ein Array. Die Dateiinput.txthat jede Zeile als Element im Array arr. Daher arr
IO.foreachMethode
Diese Methode gibt die Ausgabe ebenfalls Zeile für Zeile zurück. Die Methodeforeachund die Methodereadlinesunterscheiden sich darin, dass die Methodeforeachist mit einem Block verknüpft. Im Gegensatz zur Methodereadlines, gibt die Methodeforeachjedoch kein Array zurück. Zum Beispiel:
Beispiel
Dieser Code übergibt den Inhalt der DateitestZeile für Zeile an die Variable block, und dann wird die Ausgabe auf dem Bildschirm angezeigt.
Umbenennen und Löschen von Dateien
Du kannst dierename- unddelete-Methoden verwenden, um Dateien umzubenennen und zu löschen.
Das folgende Beispiel benennt eine vorhandene Dateitest1.txt um.:
Beispiel
Das folgende Beispiel löscht eine vorhandene Dateitest2.txt.:
Beispiel
Dateimodi und Eigentümerschaft
Mithilfe derchmod-Methode mit einer Maske, um den Modus oder die Berechtigungs-/Zugriffsliste einer Datei zu ändern:
Das folgende Beispiel ändert den Modus einer vorhandenen Dateitest.txtauf einen Maskenwert:
Beispiel
Die folgende Tabelle listet diechmodverschiedenen Masken auf, die in der Methode verwendet werden können:
| Maske | Beschreibung |
|---|---|
| 0700 | rwx-Maske für den Eigentümer |
| 0400 | r, für den Eigentümer |
| 0200 | w, für den Eigentümer |
| 0100 | x, für den Eigentümer |
| 0070 | rwx-Maske für die Gruppe |
| 0040 | r, für die Gruppe |
| 0020 | w, für die Gruppe |
| 0010 | x, für die Gruppe |
| 0007 | rwx-Maske für andere |
| 0004 | r, für andere |
| 0002 | w, für andere |
| 0001 | x, für andere |
| 4000 | Benutzer-ID beim Ausführen setzen |
| 2000 | Gruppen-ID beim Ausführen setzen |
| 1000 | Ausgelagerten Text auch nach der Verwendung speichern |
Dateiabfragen
Der folgende Befehl prüft, ob die Datei existiert, bevor die Datei geöffnet wird:
Beispiel
Der folgende Befehl prüft, ob es sich bei der Datei tatsächlich um eine Datei handelt:
Beispiel
Der folgende Befehl prüft, ob der angegebene Dateiname ein Verzeichnis ist:
Beispiel
Der folgende Befehl prüft, ob die Datei lesbar, schreibbar und ausführbar ist:
Beispiel
Der folgende Befehl prüft, ob die Dateigröße null ist:
Beispiel
Der folgende Befehl gibt die Größe der Datei zurück:
Beispiel
Der folgende Befehl wird verwendet, um den Typ der Datei zu überprüfen:
Beispiel
Die ftype-Methode identifiziert den Typ der Datei, indem sie einen der folgenden Werte zurückgibt:file, directory, characterSpecial, blockSpecial, fifo, link, socket, oder unknown。
Der folgende Befehl wird verwendet, um den Zeitpunkt zu überprüfen, zu dem die Datei erstellt, geändert oder zuletzt aufgerufen wurde:
Beispiel
Verzeichnisse in Ruby
Alle Dateien sind in Verzeichnissen enthalten, und Ruby bietet Möglichkeiten, Dateien und Verzeichnisse zu handhaben.FileDie Klasse File wird zum Umgang mit Dateien verwendet,Dirund die Klasse Dir wird zum Umgang mit Verzeichnissen verwendet.
Verzeichnisse durchsuchen
Um Verzeichnisse in einem Ruby-Programm zu wechseln, verwenden SieDir.chdir. Das folgende Beispiel wechselt das aktuelle Verzeichnis zu/usr/bin。
Sie können Dir.pwdverwenden, um das aktuelle Verzeichnis anzuzeigen:
Sie könnenDir.entriesverwenden, um die Liste der Dateien und Verzeichnisse im angegebenen Verzeichnis abzurufen:
Dir.entriesGibt ein Array zurück, das alle Elemente im angegebenen Verzeichnis enthält.Dir.foreachBietet die gleiche Funktionalität:
Eine kürzere Möglichkeit, eine Verzeichnisauflistung zu erhalten, ist die Verwendung der Array-ähnlichen Methoden von Dir:
Verzeichnisse erstellen
Dir.mkdirKann verwendet werden, um Verzeichnisse zu erstellen:
Du kannst auch Berechtigungen für ein neues Verzeichnis (nicht für ein vorhandenes Verzeichnis) über mkdir festlegen:
Hinweis:Maske 755 setzt die Berechtigungen für Eigentümer, Gruppe und Welt (alle) auf rwxr-xr-x, wobei r = Lesen, w = Schreiben, x = Ausführen.
Verzeichnisse löschen
Dir.deleteKann verwendet werden, um ein Verzeichnis zu löschen.Dir.unlinkundDir.rmdirErfüllen dieselbe Funktion und bieten uns Komfort.
Erstellen von Dateien & temporären Verzeichnissen
Temporäre Dateien sind Informationen, die während der Programmausführung einfach erstellt, aber nicht dauerhaft gespeichert werden.
Dir.tmpdirliefert den Pfad zum temporären Verzeichnis auf dem aktuellen System, aber diese Methode ist standardmäßig nicht verfügbar. UmDir.tmpdirverfügbar zu machen, ist es notwendig, require 'tmpdir' auszuführen.
Du kannstDir.tmpdirundFile.joinzusammen verwenden, um eine plattformunabhängige temporäre Datei zu erstellen:
Dieser Code erstellt eine temporäre Datei, schreibt Daten hinein und löscht dann die Datei. Die Standardbibliothek von Ruby enthält außerdem eine Bibliothek namensTempfileBibliothek, mit der temporäre Dateien erstellt werden können:
Integrierte Funktionen
Im Folgenden finden Sie eine vollständige Liste der integrierten Funktionen für den Umgang mit Dateien und Verzeichnissen in Ruby:
Andere Erweiterungen