2010-11-29 23 views
2

Il est facile de diviser une ligne d'arguments en utilisant:Comment analyser les arguments de ligne de commande inclus dans les doubles crochets?

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

Qu'en est-il de la liste suivante:

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

aiderai split string même dans ce cas?

Merci.

+5

Les arguments de ligne de commande viennent dans un tableau de chaînes appelé argv droit? Donc, aucune division n'est nécessaire. –

+0

@Mohamed: C'est vrai, merci! Veuillez ajouter une réponse pour que je puisse la marquer comme acceptée. – abenci

+0

Ouais, je faisais juste un commentaire parce que je ne savais pas si j'avais la bonne question. J'ai posté la réponse ci-dessous, merci. –

Répondre

2

Republier mon commentaire comme une réponse.

Les arguments de ligne de commande venir comme un tableau de chaînes avec argv, il n'y a vraiment pas besoin de faire une division du tout:

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

Si vous appelez le programme comme: myProg.exe /n /b /c:"MyProg 4.0", vous devriez voir ce qui suit:

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

La seule décomposition de temps sera nécessaire lorsque vous analysez un argument spécifique.

-1

vous devez diviser le séparateur d'arguments parce que je peux écrire les paramètres sans espaces tout en correct: monprog.exe/n/b/c: "MONPROG 4.0"

string.Split('/') 
+2

Je n'ai jamais vu une application qui pourrait analyser des arguments bloqués. Les arguments bien formés doivent être délimités par des espaces! – 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

Que diriez-vous de '/ c:" Some: Argument "', aussi rares soient-ils. Vous pouvez ajouter le 'arg.Split (':', 2)' pour obtenir au maximum deux chaînes de split. – Patrick

+0

@Patrick: Vrai, très rare. À mon avis, la convention d'argument de ligne de commande d'application ne devrait pas supporter une telle notation. Il est préférable d'utiliser '/ xml: File' pour de tels cas. – abatishchev

+0

Bien que la spécification d'un chemin complet inclura un: '/ file:" C: \ Folder "'. Que voulez-vous dire par/xml: Fichier? – Patrick