ArgumentParser

    • C#
    • .NET (FX) 4.0

    Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Nikx.

      ArgumentParser

      Abend,

      grundsätzlich zum Inhalt dieses Threads: Das Script wurde von @SplittyDev über CodeAddicts bereitgestellt.
      CodeAddicts ist/wird eine Gruppe aus Webentwicklern und Entwicklern, die als Team flexible, moderne
      und nützliche Software entwickelt.

      ArgumentParser

      Der ArgumentParser vereinfacht die Verwendung von Argumenten in Konsolenanwendungen stark. Das verarbeiten der Argumente
      entfällt dabei komplett, und der benötigte Code reduziert sich auf wenige Zeilen. Das Script ist flexibel aufgebaut und lässt sich leicht
      erweitern. Den Beispielcode halte ich für selbsterklärend. Trotz allem erkläre ich das Ganze nochmal.

      Beispiel

      C#-Quellcode

      1. public class Options
      2. {
      3. // -p path/to/file
      4. // --path path/to/file
      5. [Argument ("p", "path", true)]
      6. public string Path;
      7. // --unix
      8. [Argument ("", "unix", false)]
      9. public bool UseUnixLineEndings;
      10. }
      11. public static class Program
      12. {
      13. public static void Main (string[] args)
      14. {
      15. Options options = ArgumentParser.Parse<Options> (args);
      16. string path = options.Path;
      17. }
      18. }


      Deklaration: void Argument (string shortName, string fullName, bool hasParameter)

      shortName: Kürzel des Arguments ("-u")
      fullName: Voller Name des Arguments ("--unix")
      hasParameter: Wenn true wird der folgende Wert eingelesen, wenn false agiert der Wert selbst als Switch, d.h. das existieren des Attributs resultiert in dem Wert true

      Wichtig: Die Striche werden automatisch ergänzt.

      Die Options-Klasse stellt alle Argumente und deren Kürzel und Daten bereit. Dem ArgumentParser werden diese Daten in der Parse-Methode
      mitgegeben. Mit der zurückgegebenen Klasse des Typs Options lässt sich dann auf die Argumente zugreifen.

      Download

      Siehe Anhang.
      Die ArgumentParser.cs und die Argument.cs werden benötigt.


      Ich hoffe, dass das ganze Verwendung findet. :)

      Grüße,
      Nikx
      Dateien
      • Argument.cs

        (1,26 kB, 135 mal heruntergeladen, zuletzt: )
      • ArgumentParser.cs

        (1,28 kB, 144 mal heruntergeladen, zuletzt: )
      • Example.cs

        (868 Byte, 132 mal heruntergeladen, zuletzt: )
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Nikx“ ()

      Hey, ich sehe gerade dass ArgumentParser.cs und Argument.cs unterschiedliche Downloadzahlen haben.
      Ihr braucht aber beides, damit alles funktioniert.

      Argument ist ein Attribut, das die Optionen kennzeichnet,
      ArgumentParser ist die Klasse, die dieses Attribut nutzt um die Klasse zu befüllen.

      Um es nochmal ein bisschen besser zu erklären:
      Der ArgumentParser ist für Kommandozeilen-Anwendungen extrem nützlich,
      da er dem Programmierer fast die komplette Arbeit abnimmt, um Kommandozeilen-Argumente zu evaluieren.

      Ihr erstellt also eure Klasse, die alle möglichen Argumente beinhaltet wie folgt:

      C#-Quellcode

      1. class Optionen {
      2. [Argument ("p", "pfad", true)]
      3. public string Pfad;
      4. }


      Eure Main-Methode sieht dann so aus:

      C#-Quellcode

      1. static void Main (string[] args) {
      2. var optionen = ArgumentParser.Parse<Optionen> (args);
      3. }


      Das Programm kann nun so aufgerufen werden:
      programm.exe -p pfad\zur\datei oder
      programm.exe --pfad pfad\zur\datei

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „SplittyDev“ ()

      Überarbeitete Version inklusive weiterem Tutorial hier:
      github.com/codeaddicts/libArgument

      Grüße
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
      Ihr habt da 8 Switch-Cases die sich nur beim Typ unterscheiden. How 'bout Reflection?

      C#-Quellcode

      1. var tryParse = field.FieldType.GetMethod("TryParse", new[] {typeof(String), field.FieldType.MakeByRefType()});
      2. if (tryParse == null)
      3. return;
      4. object[] parameter = { args[index], null };
      5. if ((bool)tryParse.Invoke(null, parameter)) {
      6. field.SetValue(options, parameter[1]);
      7. }


      So seid ihr außerdem nicht nur auf eure paar Typen beschränkt.
      Die Lib war mir in der Tat nicht bekannt.

      Grüße
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!