如何在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?'
}
答案 0 :(得分:40)
我建议Richard Lopes' Command Line Arguments Parser。它功能强大且使用非常简单。此外,它接受指定参数的各种方法,例如:
示例代码:
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成员来完成这项任务。
如果您感觉真的是企业,可以使用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'