Announcement

Collapse
No announcement yet.

Konzeptfrage: Wie lege ich Argumente aus der Kommandozeile am besten im Programm ab

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Konzeptfrage: Wie lege ich Argumente aus der Kommandozeile am besten im Programm ab

    Hallo zusammen,

    im Moment schreibe ich ein Programm das über die Kommandozeile bis zu 10 Parameter bekommt. Meine Frage ist jetzt wie lege ich die am geschicktesten ab um dann später an beliebiger Stelle vom Programm darauf zugreifen zu können?

    Wie ich die Kommandozeile verarbeiten kann weiß ich schon, mir geht es nur darum wie die Variablen am geschicktesten anzulegen sind.

    Wenn ich das richtig im Kopf habe sind Globale Variablen nicht gern gesehen, aber wie macht man es dann "richtig"?

    In einem älteren Programm habe ich das so gemacht, aber ich weiß nicht ob das so gut ist:

    Es gibt in der Main lokale Variablen die dann per ref an die Routine übergeben werden.
    AnalyzeCmd(args, ref WorkEnv, ref ReReadData);

    [highlight=c#] static private void AnalyzeCmd(string[] cmdargs, ref string WorkEnv, ref bool ReReadData)
    {
    int cnt = 0;
    string arg = "";
    // Defaultwerte festlegen
    WorkEnv = "DISPO";
    ReReadData = false;
    for (cnt = 0; cnt < cmdargs.Length; cnt++)
    {
    arg = cmdargs[cnt];
    switch (arg.ToLower())
    {
    case "-env":
    WorkEnv = cmdargs[cnt + 1];
    cnt++;
    break;
    case "-rereaddata":
    ReReadData = true;
    break;
    case "?":
    case "-?":
    case "/?":
    case "-h":
    case "/h":
    // Hilfenachricht anzeigen
    string OutText = "";
    OutText = "Aufruf mit: \"" + System.Windows.Forms.Application.ExecutablePath + "\" [-env DBEnvironment] [-ReReadData]\n";
    OutText = OutText + "-env: DB Umgebung die benutzt werden soll (DISPO, TUDISPO oder DEDISPO)\n";
    OutText = OutText + "-ReReadData: bestimmte Daten erneut lesen\n";
    OutText = OutText.Replace(System.Windows.Forms.Application.S tartupPath + @"\", "");
    Console.WriteLine(OutText);
    break;
    //
    }
    }
    }
    [/highlight]

    Gruß Stephan

  • #2
    Hallo,

    vorab: Es gibt genügend Command-Line-Parser. Verwende am besten einen fertigen.

    Sonst lies die Argument ein -> splitte sie -> speichere sie in einem Dictionary<string, string> wobei zB aus -run foo.txt der run der Schlüssel wird und foo.txt der Value.

    Dieses Dictionary übergibts du dann jeder Klasse die es benötigt oder du hälst es als statische Eigenschaft in der Program-Klasse, oder du erstellst einen Singleton...


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Stichwort ist auch hier wieder mal Inversion of Control bzw. Dependency Injection

      Comment

      Working...
      X