解析命令行参数字符串

时间:2014-09-03 10:13:22

标签: c# .net string

这似乎是个奇怪的问题,所以我会尽可能简单地解释一下。我在C#中制作像CMD这样的应用程序,我需要像'ping'这样的命令。我有一个switch语句,它检查输入的命令并执行它。这是:

switch (CommandName)
{
    case "intro":
        {
            Console.WriteLine("intro");
            CommandListen();
        }
        break;

    case "clear":
        {
            CommandFolder.CmdClear cmd = new CommandFolder.CmdClear();
            cmd.Execute();
            CommandListen();
        }
        break;

    case "ping":
        {
            CommandFolder.CmdPing cmd = new CommandFolder.CmdPing();
            cmd.Execute(CommandName);
            CommandListen();
        }
        break;

    case "exit":
        {
            CommandFolder.CmdExit cmd = new CommandFolder.CmdExit();
            cmd.Execute();
        }
        break;

    default:
        CommandListen();
        break;
}

我不知道如何使用命令的参数,即ping [ip / url] [extra]。如果我输入'ping'它会运行并执行命令,但如果我输入'ping www.google.com',它会出现我无法识别的命令错误。我需要一种方法来检查命令的第一部分,然后传递参数。

如果这很模糊,我道歉,我只是不知道如何说出来。

1 个答案:

答案 0 :(得分:0)

您需要定义语法并为其编写解析器。正如@Lasse和@​​Dan在评论中所建议的那样,它可以像“一个命令及其参数被一个空格分隔”一样简单,这将使解析代码的天真实现如下所示:

string commandParts = CommandName.Split(" ");
string commandName = commandParts[0];
var arguments = commandParts.Skip(1).ToList();

var command = new SomeCommand(arguments);

此代码在空格(“”)上拆分输入,将第一个结果作为命令,将可选的余数作为参数(输入的参数不会变为空arguments列表)。

当然,您需要在未输入命令时添加用于错误处理的代码,或者如果要支持输入多个空格,则需要调整拆分代码。