efinf:blc2016:ruby:inputoutput

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
efinf:blc2016:ruby:inputoutput [2016/09/25 13:35] – [Lesen von STDIN] Ivo Blöchligerefinf:blc2016:ruby:inputoutput [2016/09/25 13:45] (current) Ivo Blöchliger
Line 1: Line 1:
 +{{backlinks>.}}
 +===== Input / Output =====
 +==== Lesen von STDIN ====
 +  * gets # Liest eine ganze Zeile also String ein, inklusive "\n"
 +  * STDIN.readlines # Liest alles in ein Array von Zeilen, inklusive "\n"
 +==== Ausgabe auf STDOUT ====
 +  * puts   # Ausgabe mit einem "\n" am Ende, wenn nicht schon eines darin ist.
 +  * print  # Augabe ohne zusätzliches "\n" am Ende
  
 +==== Kommandozeilenargumente ====
 +  * ARGV ist ein Array mit den Kommandozeilenargumenten
 +<code ruby argv.rb>
 + p ARGV
 +</code>
 +<code bash>
 +> ruby argv.rb hello 1 2 
 +["hello", "1", "2"]
 +>
 +</code>
 +==== Lesen / Schreiben in Dateien ====
 +Billige und flexible Variante: Redirection auf der Kommandozeile
 +<code bash>
 +  # Inhalt von inputDaten.txt wird STDIN:
 +  ruby meinprogramm.rb < inputDaten.txt
 +  # STDOUT wird in outputDaten.txt geschrieben
 +  ruby meinprogramm.rb > outputDaten.txt
 +  # Kombiniert
 +  ruby meinprogramm.rb < inputDaten.txt > outputDaten.txt
 +  
 +  # Es ist sogar möglich, den Output eines Programms als Input des nächsten zu verwenden
 +  ruby datenmais.rb | ruby maisfresser.rb
 +</code>
 +
 +Öffnen einer Datei
 +<code ruby>
 +  daten = File.new("inputDaten.txt", "r" # Zum Lesen öffnen (read)
 +  ersteZeile = daten.gets.chomp  # Erste Zeile als String, "\n" entfernt
 +  rest = daten.readlines.map{|l| l.chomp}  # Rest in Array, "\n" entfernt
 +  daten.close  # Datei wieder schliessen
 +  
 +  # Alternative (schliessen automatisch)
 +  ersteZeile=""  # Sonst lebt die Variable nur im Block und danach nicht mehr.
 +  rest = []
 +  File.new("inputDaten.txt", "r") {|daten|
 +    ersteZeile = daten.gets.chomp  # Erste Zeile als String, "\n" entfernt
 +    rest = daten.readlines.map{|l| l.chomp}  # Rest in Array, "\n" entfernt
 +  } # Datei automatisch geschlossen.
 +  
 +  # Ausgabe:
 +  File.new("outputDaten.txt", "w") {|daten|   # Ausgabe (write)
 +    daten.puts ersteZeile
 +    daten.puts rest
 +  } # Datei automatisch geschlossen.
 +  
 +</code>