efinf:blc2016:ruby:inputoutput

  • gets # Liest eine ganze Zeile also String ein, inklusive “\n”
  • STDIN.readlines # Liest alles in ein Array von Zeilen, inklusive “\n”
  • puts # Ausgabe mit einem “\n” am Ende, wenn nicht schon eines darin ist.
  • print # Augabe ohne zusätzliches “\n” am Ende
  • ARGV ist ein Array mit den Kommandozeilenargumenten
argv.rb
 p ARGV
> ruby argv.rb hello 1 2 
["hello", "1", "2"]
>

Billige und flexible Variante: Redirection auf der Kommandozeile

  # 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

Öffnen einer Datei

  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.
 
  • efinf/blc2016/ruby/inputoutput.txt
  • Last modified: 2016/09/25 15:45
  • by Ivo Blöchliger