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

#!/usr/bin/ruby val1 = "Dies ist Variable eins" val2 = "Dies ist Variable zwei" puts val1 puts val2

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

#!/usr/bin/ruby puts "Geben Sie einen Wert ein :" val = gets puts val

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

#!/usr/bin/ruby str="Hello Ruby!" putc str

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

#!/usr/bin/ruby print "Hello World" print "Guten Morgen"

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

aFile = File.new("filename", "mode") #... die Datei verarbeiten aFile.close

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.

File.open("filename", "mode") do |aFile| # ... die Datei verarbeiten end

Die folgende Tabelle listet die verschiedenen Modi zum Öffnen von Dateien auf:

ModeBeschreibung
rNur-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.
wNur-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.
aNur-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

#!/usr/bin/ruby aFile = File.new("input.txt", "r") if aFile content = aFile.sysread(20) puts content else puts "Datei kann nicht geöffnet werden!" end

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

#!/usr/bin/ruby aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") else puts "Datei kann nicht geöffnet werden!" end

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

#!/usr/bin/ruby aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") aFile.rewind aFile.each_byte {|ch| putc ch; putc ?. } else puts "Datei kann nicht geöffnet werden!" end

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

#!/usr/bin/ruby arr = IO.readlines("input.txt") puts arr[0] puts arr[1]

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

#!/usr/bin/ruby IO.foreach("input.txt"){|block| puts block}

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

#!/usr/bin/ruby #Datei test1.txt in test2.txt umbenennen File.rename( "test1.txt", "test2.txt" )

Das folgende Beispiel löscht eine vorhandene Dateitest2.txt.:

Beispiel

#!/usr/bin/ruby #Datei test2.txt löschen File.delete("text2.txt")

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

#!/usr/bin/ruby file = File.new( "test.txt", "w" ) file.chmod( 0755 )

Die folgende Tabelle listet diechmodverschiedenen Masken auf, die in der Methode verwendet werden können:

MaskeBeschreibung
0700rwx-Maske für den Eigentümer
0400r, für den Eigentümer
0200w, für den Eigentümer
0100x, für den Eigentümer
0070rwx-Maske für die Gruppe
0040r, für die Gruppe
0020w, für die Gruppe
0010x, für die Gruppe
0007rwx-Maske für andere
0004r, für andere
0002w, für andere
0001x, für andere
4000Benutzer-ID beim Ausführen setzen
2000Gruppen-ID beim Ausführen setzen
1000Ausgelagerten Text auch nach der Verwendung speichern

Dateiabfragen

Der folgende Befehl prüft, ob die Datei existiert, bevor die Datei geöffnet wird:

Beispiel

#!/usr/bin/ruby File.open("file.rb") if File::exists?( "file.rb" )

Der folgende Befehl prüft, ob es sich bei der Datei tatsächlich um eine Datei handelt:

Beispiel

#!/usr/bin/ruby #Gibt true oder false zurück. File.file?( "text.txt" )

Der folgende Befehl prüft, ob der angegebene Dateiname ein Verzeichnis ist:

Beispiel

#!/usr/bin/ruby #Ein Verzeichnis File::directory?( "/usr/local/bin" ) # => true #Eine Datei File::directory?( "file.rb" ) # => false

Der folgende Befehl prüft, ob die Datei lesbar, schreibbar und ausführbar ist:

Beispiel

#!/usr/bin/ruby File.readable?( "test.txt" ) # => true File.writable?( "test.txt" ) # => true File.executable?( "test.txt" ) # => false

Der folgende Befehl prüft, ob die Dateigröße null ist:

Beispiel

#!/usr/bin/ruby File.zero?( "test.txt" ) # => true

Der folgende Befehl gibt die Größe der Datei zurück:

Beispiel

#!/usr/bin/ruby File.size?( "text.txt" ) # => 1002

Der folgende Befehl wird verwendet, um den Typ der Datei zu überprüfen:

Beispiel

#!/usr/bin/ruby File::ftype( "test.txt" ) # => file

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

#!/usr/bin/ruby File::ctime( "test.txt" ) # => Fri May 09 10:06:37 -0700 2008 File::mtime( "text.txt" ) # => Fri May 09 10:44:44 -0700 2008 File::atime( "text.txt" ) # => Fri May 09 10:45:01 -0700 2008

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。

Dir.chdir("/usr/bin")

Sie können Dir.pwdverwenden, um das aktuelle Verzeichnis anzuzeigen:

puts Dir.pwd #Gibt das aktuelle Verzeichnis zurück, ähnlich wie /usr/bin

Sie könnenDir.entriesverwenden, um die Liste der Dateien und Verzeichnisse im angegebenen Verzeichnis abzurufen:

puts Dir.entries("/usr/bin").join(' ')

Dir.entriesGibt ein Array zurück, das alle Elemente im angegebenen Verzeichnis enthält.Dir.foreachBietet die gleiche Funktionalität:

Dir.foreach("/usr/bin") do |entry| puts entry end

Eine kürzere Möglichkeit, eine Verzeichnisauflistung zu erhalten, ist die Verwendung der Array-ähnlichen Methoden von Dir:

Dir["/usr/bin/*"]

Verzeichnisse erstellen

Dir.mkdirKann verwendet werden, um Verzeichnisse zu erstellen:

Dir.mkdir("mynewdir")

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.

Dir.mkdir( "mynewdir", 755 )

Verzeichnisse löschen

Dir.deleteKann verwendet werden, um ein Verzeichnis zu löschen.Dir.unlinkundDir.rmdirErfüllen dieselbe Funktion und bieten uns Komfort.

Dir.delete("testdir")

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:

require 'tmpdir' tempfilename = File.join(Dir.tmpdir, "tingtong") tempfile = File.new(tempfilename, "w") tempfile.puts "Dies ist eine temporäre Datei" tempfile.close File.delete(tempfilename)

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:

require 'tempfile' f = Tempfile.new('tingtong') f.puts "Hallo" puts f.path f.close

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