Подтвердить что ты не робот

С#: Как определить аргументы, введенные в консольное приложение?

Как я могу найти вход для консольного приложения в С#?

Скажем, например, я хочу запустить консольное приложение, написав: Добро пожаловать в хижину (курсор для ввода данных здесь после первой строки)

Я хотел бы, чтобы консольное приложение обнаружило две команды:

1:/help - который отобразит некоторую подсказку.

2:/пицца для пиццы -t pepperoni -d pepsi - которая будет отображать "Итак, вы хотели бы пиццу с Пепперони и Пепси выпить?"

Как бы я мог сначала обнаружить, что/команда была введена, а также прочитать аргументы типа -t pepperoni (topping) и -d pepsi (напиться), если была напечатана/пицца пищи?

Моя основная проблема заключается в том, как определить первое слово, когда-либо набранное, выяснив, что если он был /help, вызовите какой-то метод, который отправит некоторый текст справки в консоль, или если команда/питание затем прочитает, что после команды /food, -t и -p.

    static void Main(string[] args)
    {
        Console.WriteLine("Welcome To Food Hut");
        Console.ReadLine();

        // if readline equals to /help then display some help text.


        // if /food command is typed, read first argument after /food Pizza, -t TheTopping
        // and -p ForWhatToDrink

        // and then display, 'So you would like a Pizza with Pepperoni and Pepsi to drink?'
    }
4b9b3361

Ответ 1

Я рекомендую Аргумент аргументов командной строки Ричарда Лопеса. Он мощный и очень простой в использовании. Кроме того, он принимает различные способы указания аргументов, например:

  • /имя = Stefan
  • - имя = Stefan
  • - name= "Несколько слов"
  • -name 'Stefan'

Пример кода:

static void Main(string[] args)
{
    Arguments cmdline = new Arguments(args);

    Console.WriteLine(cmdline["name"]);
}

Ответ 2

Мое непосредственное предложение было бы примерно таким:

string input = Console.ReadLine();
if (input == "/help") { }
else if (input.StartsWith("/food")) { }
else { //... }

Запрет на то, что следующее простейшее решение включает регулярное выражение. Если вам нужно что-то действительно расширяемое, вы можете посмотреть в lexer/parser.

Но опять же, что-то говорит мне, что вы приближаетесь к проблеме неправильным образом. Возможно, было бы проще отобразить меню для вашего пользователя, что-то вроде этого:

Food:
1) Tofu
2) Tempeh
3) Seitan
4) Soup

Choice (1-4)? [users input]

Drink:
1) Pepsi
2) Coffee
3) Water
4) Tea
5) Juice

Choice (1-5)? [users input]

Нумерованные меню могут быть немного легче для ваших пользователей переваривать.

Ответ 3

Используйте string.split, чтобы найти все слова, разделенные пробелом.

input = Console.ReadLine();
string[] commands = input.Split(' ');
if(commands[0] == "/food")
{
 if(commands[1] == "Pizza");
   .....
}

Ответ 4

Чтобы пропустить основы кодирования, вы можете взглянуть внутрь Проект Чингис Подпрограмма синтаксического анализа командной строки Chris Sells. Это первый в таблице на связанной странице.

Ответ 5

Посмотрите на String.Contains

Ответ 6

Пол прав, вам нужно будет использовать различные члены String для выполнения этой задачи.

MSDN

Если вы действительно чувствуете себя предпринимателем, вы можете использовать класс String.Text.RegularExpression для разбора текста, но для начала используйте члены строки.

Также попробуйте выполнить синтаксический анализ строк в С#.

Ответ 7

Перешел gsscoder/commandline. Чистая объектно-ориентированная реализация, доступная через NuGet.

Ответ 8

Как насчет этого случая:

mssinp.exe -cf "C:\Temp\config.txt"

значение для параметра будет разбито как

[0] 'C'
[1] '\Temp\config.txt'