如何解析行参数?

时间:2018-11-28 18:44:44

标签: c#

我当前正在使用控制台应用程序,我想解析用户可以给程序添加的一行。
我尝试了Split string containing command-line parameters into string[] in C#中的一些代码,但这不是我想要的。
如果我输入类似jQuery(document).on("click", 'a', function () { if(window.location.href.toString().includes("?=SpecialSpecial")) { var clickedBtnTitle = jQuery(this).attr('title'); if (clickedBtnTitle !== undefined) { location.hash = "#" + clickedBtnTitle; location.reload(); } } }); 的内容,这些脚本将起作用,但是用户可以输入类似-push "test"的内容。
我想要一个脚本用户,如果用户输入以下命令行:

  

-p $ a 75 $ c 5 -p $ t“测试”&c 1 -p $ c 5 $ a 75 $ a 76

解析函数将返回:

  

{{“ PUSH”,{{“ A”,75},{“ C”,5}}}},{“ PUSH”,{{“ T”,“ test test”},{“ C”, 1}}},{“ PUSH”,{{“ C”,5},{“ A”,75},{“ A”,76}}}}

然后,我想要一个可调制脚本,可以在其中添加诸如-push $a 75 $c 5之类的命令和诸如WAIT之类的参数。 (如果可能)

编辑
如何阅读:标识符[type]
解析器输出格式:

  

{Arg0 [Command],Arg0 [Command],Arg0 [Command] ...}

命令格式:

  

{Name [string],Args [Arg []]}

Arg格式:

  

{名称[字符串],值[对象]}

示例输出:

  

{{“ CommandName”,{{“ Arg0”,“ arg0”},{“ Arg1”,1}}}}

1 个答案:

答案 0 :(得分:0)

在.net中,您有Microsoft.CSharp。因此,如果您传递类似static void Main(string[] args)之类的东西,那么您的-push $a 75 $c 5将有5个项目。假设您有多个

  

-按$ a 75 $ c 5-按$ b 100 $ d 10

您需要通过args--push重新分割-您将返回原始命令行。现在,让我们再次分裂

您需要一定的课程模式

cmd = string.Join(" ", args)

然后您执行命令并填写POCO

public class ArgsPoco
{
    public int A {get;set;}
    public int B {get;set;}
    public int C {get;set;}
}

然后,您只需使用string[] pushSections = cmd.Split(new[]{"-push"}); foreach (string sect in pushSections ) { string[] args = sect.Split('$', StringSplitOptions.RemoveEmptyEntries); foreach (string arg in args) { var poco = new ArgsPoco(); SetProperty(arg, poco); } _somePocoList.Add(poco); } private void SetProperty(string arg, ArgsPoco poco) { string item = arg.Trim(); int val = Convert.ToInt32(item.Substring(1).Trim()); if (item.StartsWith("a")) poco.A = val; else if (item.StartsWith("b")) poco.B = val; else if (item.StartsWith("c")) poco.C = val; } 中的JSon序列化属性(如

)装饰POCO
Newtonsoft.Json

我在这里不清楚您需要什么具体输出。但最重要的是,您可以使用现有工具或构建custom /