C#:如何检测键入控制台应用程序的参数?

时间:2008-11-25 05:48:14

标签: c#

如何在C#中检测控制台应用程序的输入?

比如说我希望控制台应用程序通过编写来启动: 欢迎来到食品小屋 (光标在第一行后输入内容)

我希望控制台应用程序能够检测到两个命令:

1:/ help - 这会显示一些帮助乱码。

2:/食物披萨-t辣香肠-d百事可乐 - 它会显示“所以你想要一个与意大利辣香肠和百事可乐一起吃的披萨?”

如果输入了/ food披萨,我将如何继续检测输入的内容/命令以及-t pepperoni(打顶)和-d pepsi(饮用)等参数?

我的主要问题是弄清楚如何检测输入的第一个单词,弄清楚如果是/ help然后调用一些方法将一些帮助文本发布到控制台中或者如果命令是/ food然后读取什么在/ 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?'
    }

8 个答案:

答案 0 :(得分:40)

我建议Richard Lopes' Command Line Arguments Parser。它功能强大且使用非常简单。此外,它接受指定参数的各种方法,例如:

  • /名称=斯蒂芬
  • - 名称=斯蒂芬
  • - name =“多个单词”
  • -name'Stefan'

示例代码:

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

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

答案 1 :(得分:3)

我的直接建议是这样的:

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

除此之外,下一个最简单的解决方案涉及正则表达式。如果你需要真正可扩展的东西,你可以查看词法分析器/解析器。

但话又说回来,有些东西告诉我你正以错误的方式接近问题。也许向用户显示菜单会更容易,例如:

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]

编号菜单可能会让您的用户更容易消化。

答案 2 :(得分:3)

使用string.split查找以空格分隔的所有单词。

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

答案 3 :(得分:2)

要跳过编码基础知识,您可能需要查看Genghis project内的Chris Sells命令行解析子项目。它是链接页面表格中的第一个。

答案 4 :(得分:0)

查看String.Contains

答案 5 :(得分:0)

保罗是对的,你需要使用各种String成员来完成这项任务。

MSDN

如果您感觉真的是企业,可以使用String.Text.RegularExpression类来解析文本,但是首先使用字符串成员。

还尝试用谷歌搜索C#String解析。

答案 6 :(得分:0)

遇到gsscoder/commandline。一个干净的面向对象的实现,可通过NuGet获得。

答案 7 :(得分:-3)

这个案子怎么样:

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

参数的值将被分割为

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