Поиск синтаксического анализатора аргументов командной строки for.NET [закрыто]
Я ищу парсер аргументов командной строки, например "парсер командной строки" из http://www.sellsbrothers.com/tools/Genghis/ .
особенности, которые я ищу:
- автогенерация использования
- должен иметь возможность проверить необходимые и необязательные параметры
- параметры должны поддерживать IEnumerable с поддержкой разделителя
- должен поддерживать параметры флага
- было бы неплохо поддержать объединение такие параметры, как" /fx " = = "/f /x"
- было бы неплохо не форсировать пробел после такого параметра, как "/ftest.тхт" = = "Х/ф тест.txt"
P. S : "парсер командной строки" довольно хорош, мне очень нравится его дизайн, но нет документации, нет новых обновлений, и я не мог понять, чтобы сделать определенные вещи, такие как проверка необходимых параметров.
12 ответов:
мой личный любимый 3rd party commandline parsing библиотека Парсер Командной Строки и я предполагаю, что это тот, о котором вы говорите. Самый последний релиз был менее 2 месяцев назад, и есть регулярные коммиты. Если вы хотите более зрелое предложение, вы можете проверить библиотеку консоли в проекте mono (извините, я не могу найти прямую ссылку на пространство имен на данный момент, но это часть структуры mono)
взгляните на ndesk.опции.
Это называется моно.Варианты сейчас.
популярный и довольно всеобъемлющий парсер командной строки C-это GNU getopt. Это было перенесено (или клонировано) для C#/.Net несколько раз. Некоторые из них включают в себя:
- getopt# ВКЛ freshmeat.net
- C# getopt в PHPGuru
- XGetoptCS на CodeProject
- GetOpt для .NET on CodeProject
- Getopt C#.NET on Codeplex
выбирай! Есть еще несколько других, и google может рассказать вам о них,
к сожалению, нет встроенной поддержки для обработки, в стандартной манере. Вы заглядывали в PowerShell? Бьюсь об заклад, в этой оболочке есть класс, который делает именно то, что вы хотите или что-то подобное.
Edit: как указывает fatcat1111, эта функция не поставляется с окончательной версией .net 4.0.
в C# 4.0 имеет довольно хороший. Вероятно, пока не очень полезно, но вы можете подумать о том, чтобы посмотреть на что-то, что сделает переход к встроенному в него легко, когда он выйдет. Барт Де Смет говорил об этом на своем B# blog
предлагаю NDesk.Варианты
смотрите здесь:
лучший способ проанализировать аргументы командной строки в C#?
учтите, что как только вы начнете использовать этот парсер, вам придется либо поддерживать его самостоятельно, либо зависеть от кого-то другого, чтобы поддерживать его для вас. Возможно, вам лучше написать свой собственный, начиная с ваших самых критических, немедленных требований. Я обнаружил, что для создания довольно сложного синтаксического анализа командной строки для большинства консольных приложений, над которыми я работал, не требуется слишком много работы.
Я также обнаружил, что когда разбор становится слишком сложным, это может быть пора прекратить использование командной строки.
держу пари, это не совсем то, что вы ищете, но:
У кого-то здесь была эта проблема, и его первая мысль была: "Эй, у ocaml есть довольно хороший!", и быстро портировал его на F#.
Я использую парсер из C# 3.0 поваренной книги.
все примеры из этой книги можно скачать здесь: http://examples.oreilly.com/9780596516109/
искать "аргументы", и вы найдете его. Вы должны сделать некоторые небольшие изменения кода, чтобы получить его из все это в свой собственный класс, но это не большая проблема.
Он поддерживает все ваши точки, за исключением последних двух (параметр объединения и отсутствующего пространства).
The библиотека BizArk содержит синтаксический анализатор командной строки.
в основном вы просто создаете класс, который наследует от CmdLineObject, добавляете свойства, которые вы хотите заполнить из командной строки, добавляете CmdLineArgAttribute к свойствам, а затем вызываете Initialize в своей программе. Он тоже поддерживает доводы URL-адрес с помощью ClickOnce!
характеристики (с сайта)...
- автоматическая инициализация: свойства класса автоматически устанавливаются на основе аргумент командной строки.
- свойства по умолчанию: отправить значение без указания имени свойства.
- преобразование значений: использует мощный класс ConvertEx, также включенный в BizArk, для преобразования значений в правильный тип.
- булевы флаги. Флаги могут быть заданы простым использованием аргумента (например, /b для true и/b - для false) или добавлением значения true/false, yes / no и т. д.
- массивы аргумент. Просто добавьте несколько значений после командной строки имя для установки свойства, которое определяется как массив. Например, /x 1 2 3 будет заполнять x массивом { 1, 2, 3 } (предполагая, что x определяется как массив целых чисел).
- псевдонимы командной строки: свойство может поддерживать несколько псевдонимов командной строки для него. Например, использует псевдоним ?.
- частичное признание имя. Вам не нужно указывать полное имя или псевдоним, просто достаточно заклинания для синтаксического анализатора, чтобы устранить неоднозначность свойства/псевдонима от других.
- поддерживает ClickOnce: можно инициализировать свойства, даже если они указаны в качестве строки запроса в URL-адресе для развернутых приложений ClickOnce. Метод инициализации командной строки определит, выполняется ли он как ClickOnce или нет, поэтому ваш код не нужно изменять при его использовании.
- автоматически создает /? справка: это включает в себя хорошее форматирование, которое учитывает ширину консоли.
- загрузить / сохранить аргументы командной строки в файл: это особенно полезно, если у вас есть несколько больших, сложных наборов аргументов командной строки, которые необходимо выполнить несколько раз.
Я поклонник порта C# для OptParse, встроенной библиотеки в Python. Он довольно прост в использовании по сравнению с большинством других предложений здесь и содержит ряд полезных функций в дополнение к просто автоматическому разбору.
вам может понравиться мой один половик.Cmd
простой в использовании и расширяемый парсер аргументов командной строки. Дескрипторы: Bool, плюс / минус, строка, список строк, CSV, перечисление.
построен в '/?' режим справки.
построен в '/??- и? .. D ' режимы генератора документов.
static void Main(string[] args) { // create the argument parser ArgumentParser parser = new ArgumentParser("ArgumentExample", "Example of argument parsing"); // create the argument for a string StringArgument StringArg = new StringArgument("String", "Example string argument", "This argument demonstrates string arguments"); // add the argument to the parser parser.Add("/", "String", StringArg); // parse arguemnts parser.Parse(args); // did the parser detect a /? argument if (parser.HelpMode == false) { // was the string argument defined if (StringArg.Defined == true) { // write its value RC.WriteLine("String argument was defined"); RC.WriteLine(StringArg.Value); } } }
Edit: это мой проект, и поэтому этот ответ не должен рассматриваться как одобрение от третьей стороны. Тем не менее, я использую его для каждой программы на основе командной строки Я пишу, это с открытым исходным кодом, и я надеюсь, что другие могут извлечь из этого выгоду.