2014-09-03 154 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