2013-05-06 2 views
3

Я знаком с аргументами командной строки и их использованием, но до этого я никогда не сталкивался с опциями (или флагами). Я имею в виду что-то вроде следующего:Лучший способ обрабатывать параметры командной строки в C#

$ sort -f -s -u letters.txt 

В примере Баш скрипт выше, у нас есть 3 варианта или флагов, а затем регулярными аргументами. Я хочу сделать что-то подобное в приложении C#. Каков наилучший способ обработки параметров командной строки, где аргументы могут быть указаны в следующем виде?

$ prog [-options] [args...] 
+1

Если вы хотите иметь полный уровень сложности, который могут иметь сценарии оболочки в аргументах командной строки, вы, вероятно, захотите получить библиотеку, которая сможет анализировать ваши аргументы командной строки для вас. В язык не встроен парсер; вам нужно будет выбрать один из сторонних инструментов. – Servy

ответ

3

Я бы порекомендовал вам использовать библиотеку, такую ​​как Command Line Parser. Он поддерживает, вне поля, необязательные аргументы с verb commands, например, ваш пример.

+0

Я согласен с этим. Я использовал его в прошлом. Он очень мощный и простой в использовании (код примера, который они предоставляют, действительно все, что вам нужно для начала работы). Они даже добавили пакет «NuGet» с тех пор, как я начал использовать его, что является еще одним плюсом. –

1

Я предлагаю вам попробовать использовать NDesk.Options ;, который является «программным парсером на основе обратного вызова для C#».

OptionSet в настоящее время поддерживает:

Boolean options of the form: -flag, --flag, and /flag. Boolean parameters can have a `+' or `-' appended to explicitly enable or disable the flag (in the same fashion as mcs -debug+). For boolean callbacks, the provided value is non-null for enabled, and null for disabled. 
    Value options with a required value (append `=' to the option name) or an optional value (append `:' to the option name). The option value can either be in the current option (--opt=value) or in the following parameter (--opt value). The actual value is provided as the parameter to the callback delegate, unless it's (1) optional and (2) missing, in which case null is passed. 
    Bundled parameters which must start with a single `-' and consists of a sequence of (optional) boolean options followed by an (optional) value-using option followed by the options's vlaue. In this manner, 
-abc would be a shorthand for -a -b -c, and -cvffile would be shorthand for -c -v -f=file (in the same manner as tar(1)). 
    Option processing is disabled when -- is encountered. 

Вот пример из docs:

bool show_help = false; 
List<string> names = new List<string>(); 
int repeat = 1; 

var p = new OptionSet() { 
    { "n|name=", "the {NAME} of someone to greet.", 
     v => names.Add (v) }, 
    { "r|repeat=", 
     "the number of {TIMES} to repeat the greeting.\n" + 
      "this must be an integer.", 
     (int v) => repeat = v }, 
    { "v", "increase debug message verbosity", 
     v => { if (v != null) ++verbosity; } }, 
    { "h|help", "show this message and exit", 
     v => show_help = v != null }, 
}; 

List<string> extra; 
try { 
    extra = p.Parse (args); 
} 
catch (OptionException e) { 
    Console.Write ("greet: "); 
    Console.WriteLine (e.Message); 
    Console.WriteLine ("Try `greet --help' for more information."); 
    return; 
} 
0

Я использую my own. Это просто и делает работу (для меня).