next up previous contents index
Search Next: Dateien beschreiben Up: Variablen, Blöcke und Iteratoren Previous: Dateien erzeugen und löschen   Contents   Index

Dateien einlesen

File.open("demo") { |file| file.readlines }
# äquivalent
readlines("demo")

Während die Methode readlines die Datei komplett einliest und ein Array mit den einzelnen Zeilen zurückliefert, kann eine Datei auch zeilenweise bearbeitet werden. Welches Verfahren gewählt wird, hängt davon ab, ob eine hohe Geschwindigkeit wichtiger ist (readlines) oder eher eine geringe Speichernutzung wie beim nächsten Beispiel:

File.open("demo") { |file|
  while file.gets
    print $_ if /Ruby/
  end
}

Die Methode File#gets liefert nil, wenn das Dateiende erreicht ist, so dass die Schleife abbricht. Die ansonsten gleichwertige Methode readline erzeugt einen EOFError.

Es gibt auch noch Iteratoren-Varianten für diese Prozedur, die solche Details verbergen:

File.open("demo") { |file|
  file.each_line { |line|
    print line if line =~ /Ruby/
  end
}

# oder auch
File.open("demo").each { |line|
  print line if line =~ /Ruby/
}

# oder auch
File.foreach("demo") { |line|
  print line if line =~ /Ruby/
}

Binäre Dateien kann man mit der Methode each_byte Byte für Byte einlesen.


\epsfig{height=36pt,file=images/chan.eps}Ab Version 1.7[*] kann man für einzelne IO-Streams jeweils ein eigenes Encoding-Schema setzen:

f = open("file-in-utf8")
f.encoding = "utf-8"
s = f.readline       
puts s.encoding
puts s[0]           
f.close
\epsfig{height=10pt,file=images/ruby.eps}



Footnotes

... 1.7[*]
Encoding setzen


(C) 2002 by dpunkt.de, Armin Roehrl, Stefan Schmiedl, Clemens Wyss 2002-01-20