Kommandozeilenparameter



  • Hi,

    wie werte ich in einer Konsolenanwendung die Kommandozeilenparameter "richtig" aus? Also bisher hab ich halt eine feste Reihenfolge, mit der ich die Parameter eingeben muss:

    Progaufruf Para1 Para2 Para3

    Jetzt hätte ich gerne, dass es nicht fix sein muss:

    Progaufruf Para3 Para1 Para2

    Natürlich sollen die Parameter richtig zuordnen werden. Wenn ich z.B. als Parameter "CommentOff / CommentOn" nehme, muss ich dann einfach jeden einzelnen P. auf "CommentOn / Off" prüfen und wenn er übergeben wurde dann auf interne Variablen zuordnen wenn nicht dann "default" Wert setzen?!

    Wie wird sowas normal gemacht, bzw. wie macht ihr das??

    Legoals



  • wenn die Parameterreihenfolge nicht festgelegt sein soll, mußt Du neben dem eigentlichen Parameter auch den Namen des Parameters mitgeben, weil Du ja sonst keine Chance hast, zu unterscheiden, ob 100 nun die maximale Dateigröße oder die maximale Anzahl an Ausgabezeilen sein soll.

    Die Realisierung des Parameterparsings ist relativ simpel: Du brauchst eine Schleife, die über alle Parametereingaben geht. In dieser ermittelst Du zunächst den Parameternamen. Dann mußt Du prüfen, ob es diesen Namen nach Deiner Definition gibt. Wenn ja, vergibst Du dafür einen eindeutigen Index von 1 bis X beispielsweise. In einer nachgelagerten switch() Anweisung kannst Du dann je nach Index den Wert ermitteln, der für diesen Parameter gelten soll. Das ist dann das gleiche, was Du bei deinen fixen Parameterabfragen auch schon machst. Das wars eigentlich schon.

    Falls es wahlfrei ist, die Parameter anzugeben, so mußt Du natürlich vor dem Schleifenbeginn noch alle Werte in Deinen Programmvariablen auf Default-Werte setzen. Bei MUSS-Parametern, die aber vom Anwender nicht angegeben wurden, kannst Du nach der Schleife prüfen, ob die nicht gesetzt sind und dann entsprechende Fehlermeldungen ausgeben.



  • Die Realisierung des Parameterparsings ist relativ simpel:

    Besonders wenn man es nicht selbst von Hand macht sondern einfach eins der ca. 1.7 Millionen Kommandozeilen-Parser-Packete einsetzt.



  • Entweder das Buch Obsfuscated C and other Mysteries kaufen (schöne stabile C-Implementierung)

    oder auf die Homepage von

    Toni Schornboeck gehen und dort das Paket args_1_0-zip holen, das ist eine interessante C++ Impelementierung.

    http://www.schornboeck.net/


Anmelden zum Antworten