1

我正在尝试解释字符串命令以运行关联的脚本。这是我到目前为止所拥有的:

        // A typical command that can come from a TextBox control
        string command = "Create";

        // Remove all white space
        command = System.Text.RegularExpressions.Regex.Replace(command, @"\s", "");

        // Make case insesitive by converting to lowercase
        command = command.ToLower();

        switch (command)
        {
            case "create": /* Run create script*/ break;
            case "delete": /* Run delete script*/ break;
            // etc.
        }

在我引入与特定命令关联的参数之前,这很好用。

我认为这可以用圆括号表示,因此更复杂的命令如下所示:

string command = "Create(paramA, paramB, etc.)"

假设我使用这种方法走在正确的道路上,那么检测和解释参数的好方法是什么?

该命令的规则是:

'(' ')' 打开和关闭参数集 ',' 分隔每个参数

换句话说,如何检测参数的开头和结尾并正确分隔每个参数?

另一个问题当然是将命令本身与参数分开。

我考虑过使用:

command.StartsWith("create"); // etc.

但这在 switch case 条件结构中不起作用。

4

2 回答 2

2

您必须创建一个解释器类,它将命令分成单独的部分,存储在一个Command类中。然后,您可以打开 Command.Name 例如。

一些伪代码来表明我的意思:

public static class Interpreter
{
    public static Command CreateCommand(string commandLine)
    {
        Command newCommand = new Command();
        newCommand.Name = commandLine.Split(' ')[0];
        newCommand.Parameters.Add(...)

        return newCommand
    } 
}

您当然必须准确检查命令行的语法。命令类存储有关命令的信息,例如它的名称、参数列表、返回类型等。

一旦你有了一个Command对象,你可以在它的任何属性上执行 switch 语句(如果适用)。稍后,您可以编写方法来执行命令并将所有信息整齐地存储,而无需再次解释它。

于 2013-04-12T13:12:00.157 回答
0

在您的代码中只需更改

开关(命令)

开关 (command.Substring(0, command.IndexOf('(')))

对于参数,使用“,”分割

于 2013-04-12T13:15:48.320 回答