我正在尝试解释字符串命令来运行相关的脚本。这就是我到目前为止所做的:
// 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条件结构中不起作用。
答案 0 :(得分: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语句(如果适用)。稍后,您可以编写执行命令的方法,并将所有信息整齐地存储起来,而无需再次解释。
答案 1 :(得分:0)
在您的代码中只需更改
即可开关(命令)
与
switch(command.Substring(0,command.IndexOf('(')))
参数使用','
拆分