Bücher online kostenlos Kostenlos Online Lesen
Die Programmiersprache Ruby (German Edition)

Die Programmiersprache Ruby (German Edition)

Titel: Die Programmiersprache Ruby (German Edition) Kostenlos Bücher Online Lesen
Autoren: David Flanagan , Yukihiro Matsumoto
Vom Netzwerk:
Newline). Die von diesen Methoden zurückgegebenen Zeilen enthalten den Zeilentrenner (auch wenn die letzte Zeile einer Datei eventuell keinen hat). Mit
String.chomp!
schneiden Sie den Zeilentrenner ab. Die spezielle globale Variable
$/
enthält den Zeilentrenner. Sie können
$/
ändern, um das Standardverhalten aller zeilenlesenden Methoden zu ändern, oder Sie übergeben diesen Methoden (einschließlich des Iterators
each
) einfach einen alternativen Trenner. Das lässt sich zum Beispiel nutzen, wenn Sie kommaseparierte Felder aus einer Datei lesen, oder wenn Sie eine Binärdatei lesen, die irgendeine Form von »Datensatztrenner« enthält. Es gibt zwei besondere Fälle für den Zeilentrenner. Wenn Sie
nil
angeben, lesen die zeilenbasierten Methoden bis zum EOF und geben den gesamten Inhalt des Streams als eine Zeile zurück. Wenn Sie den leeren String als Zeilentrenner definieren, lesen die zeilenbasierten Methoden einen ganzen Absatz ein und suchen nach einer leeren Zeile als Trenner.
    In Ruby 1.9 kann man
gets
und
readline
optional einen Integerwert als erstes Argument oder als zweites Argument nach einem Trenn-String übergeben. Wenn man das tut, gibt dieser Wert die maximale Anzahl von Bytes an, die aus dem Stream gelesen werden sollen. Diese Grenze besteht, um zu verhindern, dass man aus Versehen unerwartet lange Zeilen einliest, und die Methoden sind Ausnahmen von der oben erwähnten Regel – sie geben kodierte Zeichen-Strings zurück, obwohl sie ein Begrenzungsargument haben, das in Byte gemessen wird.
    Schließlich merken sich die zeilenbasierten Methoden
gets
,
readline
und der Iterator
each
(sowie sein Alias
each_line
) die Anzahl von schon gelesenen Zeilen. Sie können die Zeilenzahl mit der Methode
lineno
lesen und sie mit dem Akzessor
lineno=
setzen. Beachten Sie, dass
lineno
eigentlich nicht die Anzahl der Newlines in einer Datei zählt. Es zählt die Häufigkeit, mit der zeilenbasierte Lesemethoden aufgerufen werden, und kann verschiedene Ergebnisse liefern, wenn Sie unterschiedliche Zeilentrennzeichen nutzen:
DATA.lineno = 0 # Beginnen mit Zeile 0, auch wenn man am Ende der Datei ist
DATA.readline # Eine Zeile mit Daten lesen
DATA.lineno # => 1
$. # => 1: geheimnisvolle globale Variable, implizit gesetzt
    9.7.3.2 Ganze Dateien lesen
    IO
definiert drei Klassenmethoden zum Lesen von Dateien, ohne dass man einen
IO
-Stream öffnen muss.
IO.read
liest eine gesamte Datei (oder einen Teil einer Datei) ein und liefert sie als einen String zurück.
IO.readlines
liest eine gesamte angegebene Datei in ein Array mit Zeilen ein. Und
IO.foreach
iteriert über die Zeilen einer angegebenen Datei. Keine dieser Klassenmethoden benötigt eine Instanz eines
IO
-Objekts:
data = IO.read("data") # Lies die gesamte Datei und gib sie zurück
data = IO.read("data", 4, 2) # Lies 4 Bytes beginnend bei Byte 2
data = IO.read("data", nil, 6) # Liest von Byte 6 bis End-of-File
# Lies Zeilen in ein Array
words = IO.readlines("/usr/share/dict/words")
# Lies Zeilen nach und nach ein und initialisiere einen Hash
words = {}
IO.foreach("/usr/share/dict/words") {|w| words[w] = true}
    Obwohl diese Klassenmethoden in der Klasse
IO
definiert sind, arbeiten sie mit Dateinamen, und es ist auch üblich, sie als Klassenmethoden von
File
zu nutzen:
File.read
,
File.readlines
und
File.foreach
.
    Die Klasse
IO
definiert auch eine Instanzmethode namens
read
, die der Klassenmethode mit demselben Namen entspricht – ohne Argumente liest sie Text bis zum Ende des Streams ein und liefert ihn als kodierten String:
# Eine Alternative zu text = File.read("data.txt")
f = File.open("data.txt") # Öffnet eine Datei
text = f.read # Liest den Inhalt als Text ein
f.close # Schließt die Datei
    Die Instanzmethode
IO.read
kann auch mit Argumenten verwendet werden, um eine vorgegebene Anzahl von Bytes aus dem Stream zu lesen. Diese Anwendung wird im nächsten Abschnitt beschrieben.
    9.7.3.3 Bytes und Zeichen einlesen
    Die Klasse
IO
definiert auch Methoden zum Lesen von einem oder mehreren Bytes auf einmal aus einem Stream, aber diese Methoden haben sich zwischen Ruby 1.8 und Ruby 1.9 deutlich verändert, da sich Rubys Definition eines Zeichens geändert hat.
    In Ruby 1.8 sind Bytes und Zeichen das Gleiche und die Methoden
getc
und
readchar
lesen ein einzelnes Byte und geben es als
Fixnum
zurück. Wie
gets
gibt
getc
den Wert
nil
bei EOF zurück. Und wie
readline
wirft
readchar
einen
EOFError
, wenn es bei EOF aufgerufen wird.
    In Ruby 1.9

Weitere Kostenlose Bücher