Как разобрать аргументы командной строки, заключенные в двойные скобки? - PullRequest
2 голосов
/ 29 ноября 2010

Легко разбить строку аргументов, используя:

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

А как насчет следующего списка:

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

Поможет ли разбиение строки даже в этом случае?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 02 декабря 2010

Повторное размещение моего комментария в качестве ответа.

Поскольку аргументы командной строки представляются в виде строкового массива с argv, на самом деле вообще нет необходимости выполнять какое-либо разбиение:

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

Если вы вызываете программу как: myProg.exe /n /b /c:"MyProg 4.0", вы должны увидеть следующее:

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

Единственное разделение времени будет необходимо, когда вы анализируете конкретный аргумент.

2 голосов
/ 29 ноября 2010
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 голосов
/ 29 ноября 2010

Я рекомендую использовать NDesk.Options. Это похожая на getopt библиотека для C #.

http://www.ndesk.org/Options

0 голосов
/ 29 ноября 2010

Вы должны разделить разделитель аргументов, потому что я могу писать параметры без пробелов, оставаясь при этом правильными: myProg.exe / n / b / c: «MyProg 4.0»

string.Split('/')
...