Argumentübergabe

Du bist hier: Hinterkattentuffel - Ruby - Argumentübergabe
Prev: Rekursion

Kommandozeilenargumente landen bei Ruby in einer Argumentliste ARGV oder auch $*:

$*.each { | filename | printf "%s\n", filename }

Damit kann man nun z. B. Ersetzungs-Operationen auf Dateien durchführen. Eine Ersetzungsfunktion könnte z. B. so aussehen:

def filesed!(pattern, replaceString, filename)
  regexPattern = Regexp.compile(pattern)
  tmpFilename = "#{filename}.#{Time.now.usec}"
  tmpFile = File.new(tmpFilename, "w")
  srcFile = File.open(filename)
  srcFile.each_line do
    |line|
    tmpFile.print line.gsub(regexPattern) { |match|
        replaceString;
    }
  end
  tmpFile.close
  srcFile .close
  File.rename(tmpFilename, filename)
end

Das Ausrufezeichen im Funktionsnamen deutet an, dass hier etwas potentiell gefährliches geschieht, nämlich das Ersetzten der Quelldatei durch eine Datei in der Ersetzungen stattgefunden haben könnten. Die Funktion demonstriert ferner, wie man Variablen in Strings einbetten kann. Dateiname und Millisekunden werden zu einem String zusammengesetzt, der als Dateiname für eine temporäre Datei verwendet wird.

Auch wenn die Funktion weit davon entfernt ist, robust programmiert zu sein, so istr sie dennoch verwendbar. Man könnte sie z. B. verwenden, um in Html-Dateien <br /> und <br/> durch <br> zu ersetzen. Dies macht filesed_0.1.rb.txt:

CMD>rename C:/bin/filesed_0.1.rb.txt filesed.rb
CMD>filesed *.htm*

Das Skript verändert Dateien, also besser zunächst anhand einiger Beispieldateien testen.

Next: Optionen