2010-11-29 9 views
2

Es ist einfach, eine Reihe von Argumenten zu trennen mit:Wie parse ich Befehlszeilenargumente in doppelten Klammern?

// get arguments for myProg.exe /n /b /c 
string.Split(' '); 

Was ist mit der folgenden Liste:

// get arguments for myProg.exe /n /b /c:"MyProg 4.0" 

Wird String Split auch in diesem Fall helfen?

Danke.

+5

Die Befehlszeilenargumente kommen in einem String-Array namens argv richtig? Es ist also kein Splitting notwendig. –

+0

@Mohamed: Es stimmt, danke! Bitte fügen Sie eine Antwort hinzu, damit ich sie als akzeptiert markieren kann. – abenci

+0

Ja, ich habe ursprünglich nur einen Kommentar gemacht, weil ich nicht wusste, ob ich die Frage richtig gestellt habe. Ich habe die Antwort unten gepostet, danke. –

Antwort

2

mein Kommentar als Antwort Umbuchen.

Da die Befehlszeilenargumente als String-Array mit argv kommen, es gibt wirklich keine Notwendigkeit, überhaupt eine Spaltung zu tun:

public static void Main (string[] argv) 
{ 
    foreach (string arg in argv) { 
    Console.WriteLine("arg: {0}", arg); 
    } 
} 

Wenn Sie das Programm wie nennen: myProg.exe /n /b /c:"MyProg 4.0", sollten Sie sehen, Folgendes:

arg: /n 
arg: /b 
arg: /c:MyProg 4.0 

Die einzige Zeitaufteilung wird benötigt, wenn Sie ein bestimmtes Argument analysieren.

-1

Sie auf das Argument Separator aufgeteilt werden soll, weil ich die Parameter ohne Leerzeichen schreiben können, während immer noch richtig: myprog.exe/n/b/c: "myprog 4.0"

string.Split('/') 
+2

Ich habe nie eine Anwendung gesehen, die festgefahrene Argumente analysieren könnte. Gut geformte Argumente sollten durch Leerzeichen entgrenzt werden! – abatishchev

2
static void Main (string[] args) 
{ 
    foreach (var arg in args) 
    { 
     var arr = arg.Split(':'); 
     if (arr.Length == 2) 
     { 
      string name = arr[0]; 
      string value = arr[1]; 
      // parse arg as a key-value pair 
     } 
     else 
     { 
      // parse arg as a flag 
     } 
    } 
} 
+0

Wie wäre es mit '/ c:" Some: Argument "', so selten wie sie sind. Sie können 'arg.Split (':', 2)' hinzufügen, um maximal zwei Strings von Split zu erhalten. – Patrick

+0

@Patrick: Richtig, sehr selten. Meiner Meinung nach sollte die Anwendungsbefehlszeilenargumentkonvention solche Notationen nicht unterstützen. Es ist besser, '/ xml: File' für solche Fälle zu verwenden. – abatishchev

+0

Obwohl ein vollständiger Pfad angegeben wird, enthält er: '/ file:" C: \ Folder "'. Was meinst du mit/xml: Datei? – Patrick

Verwandte Themen