我当前正在使用控制台应用程序,我想解析用户可以给程序添加的一行。
我尝试了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}}}}
答案 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序列化属性(如
Newtonsoft.Json
我在这里不清楚您需要什么具体输出。但最重要的是,您可以使用现有工具或构建custom /