2010-03-02 4 views
8

Ich kenne Ruby nicht sehr gut, aber ich versuche, dieses Skript, das ein Mitarbeiter geschrieben hat, etwas Funktionalität hinzuzufügen.Wie man variable Argumente mit dem OptionParser von Ruby verwendet

Im Moment braucht es ein paar Flags und Standard als Eingabe, und es verwendet OptionParser, um die Flags zu analysieren.

Ich möchte OptionParser verwenden, um eine Auswahl von Befehlszeilenargumenten zu analysieren, die denen von cat ähnlich sind. Also ich denke, meine Frage ist, wie würde ich die Befehlszeilenoptionen Parsen Teil der Katze in Ruby mit OptionParser

cat [OPTION]... [FILE]... 

Hoffnung schreiben, die Sinn macht, ist jede Hilfe dankbar.

+0

Fragen Sie, wie man mit den nicht wechselnden ([FILE]) Argumenten umgeht? –

+0

Ja, ich konnte Code für alle Switch-Optionen schreiben, aber ich weiß nicht, wie ich mit der unendlichen Anzahl der danach aufgelisteten Dateien umgehen soll. Entschuldigung, ich war unklar. – icco

+0

Entschuldigung, ich habe meine Antwort aktualisiert. Nachdem Sie alle Optionen analysiert haben, sollten Sie ARGV als Array von Dateinamen beibehalten. Angenommen, der Benutzer hat eine gültige Befehlszeile eingegeben. – Shadowfirebird

Antwort

8

Ich werde andere Befehlszeilenoperationen verlassen, wie sie sagen, als eine Übung für den Leser! Du hast die Idee.

(NB: Ich hatte einen fiktiven Parameter -x erfinden Wert nach einer Flagge Demo vorbei.)

Update: Ich hätte erklärt, dass diese ARGV als ein Array von Dateinamen verlassen wird, unter der Annahme, dass die Benutzer hat irgendeinen eingegeben.

+0

Das Problem damit ist, dass es nur eine Datei unterstützt. Ich versuche wirklich herauszufinden, wie man mit der Tatsache umgehen kann, dass es 4 Dateien in der Befehlszeile gibt. Sagen wir einen Anruf wie "cat a.txt b.txt c.txt d.txt". – icco

+1

Nein, ARGV sollte ein Array mit einem Element für jedes Wort auf der Befehlszeile sein, nachdem die Optionen verarbeitet wurden. In Ihrem Beispiel würde es vier Elemente haben. – Shadowfirebird

+2

@icco 'setzt ARGV.inspect # => [" a.txt "," b.txt "," c.txt "," d.txt "]' –