簡體   English   中英

解析命令行參數字符串

[英]Parsing command line parameters 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”,它將出現我無法識別的命令錯誤。 我需要一種方法來檢查命令的第一部分,然后通過傳遞參數。

如果這含糊,我深表歉意,我只是不知道該怎么說。

您需要定義語法並為此編寫解析器。 正如@Lasse和@​​Dan在注釋中所建議的那樣,它可以很簡單,例如“一個命令及其參數由一個空格分隔”,這將使解析代碼的幼稚實現看起來像這樣:

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

var command = new SomeCommand(arguments);

此代碼在空格(“”)上分割輸入,將第一個結果作為命令,並將可選的其余部分作為參數(沒有輸入的參數將成為空arguments列表)。

當然,您需要為沒有輸入命令時的錯誤處理添加代碼,或者如果您想支持輸入多個空格,請調整拆分代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM