2014-09-03 159 views
0

这似乎是一个奇怪的问题,所以我会尽可能简单地解释它。我正在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”,则会出现无法识别的命令错误。我需要一种方法来检查命令的第一部分,然后传递参数。

我很抱歉,如果这是模糊的,我只是不知道该怎么说。

+3

所以,你基本上问如何拆分空间的字符串? – 2014-09-03 10:15:02

+3

尝试此库 - https://commandline.codeplex.com/ – Anuraj 2014-09-03 10:17:23

+0

您的代码正在查看'CommandName',它大概是从某处用户输入设置的。在捕获该值的代码中,需要将用户的输入分为“命令”和“参数”,而不是仅仅通过整个事件。你有这样的东西吗?如果没有,您需要查看“解析”教程,这些教程将向您展示如何将字符串分解为可识别的块。 – 2014-09-03 10:17:30

回答

0

您需要定义一种语法并为其编写解析器。作为@Lasse和@​​丹的意见建议,也可以是简单如“命令及其参数用一个空格分隔”,这将使一个天真的实现解析的代码如下所示:

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

var command = new SomeCommand(arguments); 

该代码拆分空间上的输入(“”),将第一个结果作为命令,将可选余数作为参数(不输入任何参数将变为空的列表)。

当然,如果您想要输入多个空格,您当然需要添加错误处理代码,或者调整分割代码。

+0

工作!谢谢! – user3684975 2014-09-03 18:01:32