|
Du bist hier:
Hinterkattentuffel -
Ruby -
Optionen Prev: Argumentübergabe |
|
Um ein Skript vernünftig parametrisieren zu können, muss man auch Kommandozeilenoptionen auswerten. Dank eingebautem Pattern-Matching und Case-Statement geht das recht einfach. Wir erweitern unser Skript "filesed" um die Optionen -s für Search und -r für Replace. Beide Optionen erwarten einen Parameter. Auf -s muss ein Suchpattern folgen, auf -r ein String, der das Pattern ersetzen soll. Ein valider Aufruf sollte dann etwa so aussehen: CMD>filesed -s "<br />" -r "<br>" *.htm* Zunächst schreiben wir eine Funktion, die bei Fehleingaben einen Hinweis auf den korrekten Aufruf liefert und das Programm beendet: def using print <<-'ENDE' Usage: filesed -s <pattern>; -r <string> <file 1> [ <more files> ] ENDE exit 1 end Der Teil zwischen <<-'ENDE' und ENDE ist ein vorformatierter String, der insbesondere Tabulatoren und Zeilenumbrüche enthalten darf. Das exit 1 bricht das Programm durch Werfen einer Exception ab. Wir können nun für ein Kommandozeilenargument entscheiden, ob es eine bekannte Option ist und das Programm bei unbekannten Optionen beenden: if (/^-.*/ =~ argument) != nil # Option if (/^-[rs]/ =~ argument) == nil then using end optionsart = argument[1] end Das Case-Statement in Ruby sieht etws anders aus als in C, ist aber selbsterklärend. Hier das fertige Skript: filesed_0.2.rb.txt. Das Skript hat schon eine gewisse Länge. Solche Skripte sollte man nicht mehr mit Notepad schreiben. Für den Anfang kann man den mitinstallierten Scintilla-Editor verwenden. Die eigentliche Wortersetzung habe ich denn auch per '#~' auf Scintilla-Art auskommentiert damit man bedenkenlos mit den Skript herumexperimentieren kann. Es ist sicher vernünftig, eine Folgeversion des Skripts mit einer Testoption auszustatten, die lediglich protokolliert, welche Ersetzungen stattfinden würden. Den auf -s oder -r folgenden Ausdruck sollte man mit doppelten Anführungszeichen schützen. Ein " innerhalb des durch Anführungsstriche geschützen Arguments ist möglich. Es emfielt sich dringend, zunächst ein paar Experimente anzustellen. Ich habe dafür das Stapelverarbeitungsprogramm batchtest.bat.txt verwendet. Um im Rubyskript Anführungsstriche zu bekommen, muss man die inneren " nochmals Schützen, diesmal mit dem in Ruby üblichen \, also z. B. -r "href=\"index.htm\"". Wen an dem Programm noch Dinge stören, ist auf der richtigen Fährte. Mehr dazu auf der nächsten Seite. |
| Next: The ruby way |