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:
Streams
STDOUT
und
STDERR
sind beschreibbar, genau wie Dateien, die in einem anderen Modus als
"r"
oder
"rb"
geöffnet wurden.
    IO
definiert eine einzelne Methode
putc
, um einzelne Bytes oder Zeichen in einen Stream zu schreiben. Diese Methode erwartet entweder einen Bytewert oder einen String mit einem einzelnen Zeichen als Argument und hat sich daher von Ruby 1.8 zu 1.9 nicht geändert:
o = STDOUT
# Ausgabe einzelner Zeichen
o.putc(65) # Einzelnes Zeichen 65 schreiben (großes A)
o.putc("B") # Einzelnes Zeichen 66 schreiben (großes B)
o.putc("CD") # Nur das erste Byte des String schreiben
    Die Klasse
IO
definiert eine Reihe von anderen Methoden zum Schreiben eigener Strings. Diese Methoden unterscheiden sich in der Zahl der Argumente und darin, ob sie Zeilentrenner einfügen. Denken Sie daran, dass Textausgaben in Ruby 1.9 in die externe Kodierung des Streams umgewandelt werden, falls eine angegeben wurde:
o = STDOUT
# String-Ausgabe
o << x # Ausgabe von x.to_s
o << x << y # Kann verkettet werden: Ausgabe von x.to_s + y.to_s
o.print # Ausgabe von $_ + $\
o.print s # Ausgabe von s.to_s + $\
o.print s,t # Ausgabe von s.to_s + t.to_s + $\
o.printf fmt,*args # Ausgabe von fmt%[args]
o.puts # Ausgabe von Newline
o.puts x # Ausgabe von x.to_s.chomp plus Newline
o.puts x,y # Ausgabe von x.to_s.chomp, newline, y.to_s.chomp, Newline
o.puts [x,y] # Wie oben
o.write s # Ausgabe von s.to_s, Rückgabe von s.to_s.length
o.syswrite s # Low-Level-Version von write
    Ausgabestreams lassen sich anfügen, so wie Strings und Arrays, und Sie können mit dem Operator
<<
Werte hineinschreiben.
puts
ist eine der gebräuchlichsten Ausgabemethoden. Sie wandelt jedes Argument in einen String um und schreibt diesen in den Stream. Wenn der String nicht schon mit einem Newline-Zeichen endet, wird eines hinzugefügt. Wenn eines der Argumente von
puts
ein Array ist, wird das Array rekursiv erweitert und jedes Element in einer eigenen Zeile geschrieben – so als ob es direkt als Argument an
puts
übergeben worden wäre. Die Methode
print
wandelt ihre Argumente in Strings um und gibt sie an den Stream aus. Wenn der globale Feldtrenner
$
, nicht seinen Standardwert
nil
besitzt, wird der Wert zwischen jedem Argument von
print
ausgegeben. Wenn der Ausgabedatensatztrenner
$/
nicht seinen Standardwert
nil
enthält, wird dieser Wert nach allen Argumenten ausgegeben.
    Die Methode
printf
erwartet einen Format-String als erstes Argument und fügt die Werte weiterer Argumente in diesen Format-String über den
String
-Operator
%
ein. Dann wird der »erweiterte« String ohne Newline oder einen Datensatztrenner ausgegeben.
    write
gibt einfach sein eines Argument so wie
<<
aus und liefert die Anzahl der geschriebenen Bytes zurück. Schließlich ist
syswrite
noch eine Low-Level-Funktion, die wie
write
funktioniert, aber keinen Puffer nutzt und auch keine Kodierung vornimmt. Wenn Sie
syswrite
nutzen, dürfen Sie nur diese Methode verwenden und sie nicht mit anderen Schreibmethoden kombinieren.
    9.7.5 Methoden für freien Zugriff (Random Access)
    Manche Streams – wie die, die Netzwerk-Sockets oder die Benutzereingabe im Terminal repräsentieren – sind sequenzielle Streams: Nachdem Sie in sie geschrieben oder aus ihnen gelesen haben, können Sie nicht zurückgehen. Andere Streams, wie zum Beispiel die, die aus Dateien oder Strings lesen oder in sie schreiben, ermöglichen den freien Zugriff (Random Access) mit den hier beschriebenen Methoden. Wenn Sie versuchen, diese Methoden mit einem Stream zu nutzen, der keinen freien Zugriff erlaubt, werfen sie eine
SystemCallException
:
f = File.open("test.txt")
f.pos # => 0: gibt die aktuelle Position in Bytes zurück
f.pos = 10 # Spring zu Position 10
f.tell # => 10: ein Synonym für pos
f.rewind # Geh zurück zu Position 0, setze lineno auf 0
f.seek(10, IO::SEEK_SET) # Spring zur absoluten Position 10
f.seek(10, IO::SEEK_CUR) # Spring 10 Bytes vorwärts von der aktuellen Position
f.seek(-10, IO::SEEK_END) # Spring zu 10 Bytes vor dem Ende
f.seek(0, IO::SEEK_END) # Spring bis zum Dateiende
f.eof? # => true: wir sind am Ende
    Wenn Sie
sysread
oder
syswrite
in Ihrem Programm verwenden, nutzen Sie für den freien Zugriff statt
seek
die Methode
sysseek
.
sysseek
verhält sich wie
seek
, nur dass es nach jedem Aufruf die neue Position in der Datei zurückliefert:
pos = f.sysseek(0, IO::SEEK_CUR) # Aktuelle Position erhalten
f.sysseek(0, IO::SEEK_SET) # An den Anfang zurückspringen
f.sysseek(pos, IO::SEEK_SET) # Zur

Weitere Kostenlose Bücher