C# 新手需要知道如何像这样解析整个文本组
我需要解析一个包含10000个分组的文本文件C# 新手需要知道如何像这样解析整个文本组,c#,.net,C#,.net,我需要解析一个包含10000个分组的文本文件 group "C_BatTemp" -- block-group { block: "Constant" flags: BLOCK|COLLAPSED } -- Skipping output Out1 p_untitled_P_real_T_0[1] { type: flt(64,IEEE)* alias: "Value" flags: PARAM } endgroup
group "C_BatTemp" -- block-group
{
block: "Constant"
flags: BLOCK|COLLAPSED
}
-- Skipping output Out1
p_untitled_P_real_T_0[1]
{
type: flt(64,IEEE)*
alias: "Value"
flags: PARAM
}
endgroup -- block-group "C_BatTemp"
string Varname = "C_BatTemp";
string GroupType = "Constant";
string BaseAdressName = "p_untitled_P_real_T_0";
int AdressOffset = 1; // number in parenthesis p_untitled_P_real_T_0[1]<----
string VarType = "flt(64, IEEE)";
bool IsPointer = true; // true if VarType is "flt(64, IEEE)*" ,
//false if "flt(64, IEEE)"
string VarAlias = "Value";
我希望解析器填充的所需对象如下所示
group "C_BatTemp" -- block-group
{
block: "Constant"
flags: BLOCK|COLLAPSED
}
-- Skipping output Out1
p_untitled_P_real_T_0[1]
{
type: flt(64,IEEE)*
alias: "Value"
flags: PARAM
}
endgroup -- block-group "C_BatTemp"
string Varname = "C_BatTemp";
string GroupType = "Constant";
string BaseAdressName = "p_untitled_P_real_T_0";
int AdressOffset = 1; // number in parenthesis p_untitled_P_real_T_0[1]<----
string VarType = "flt(64, IEEE)";
bool IsPointer = true; // true if VarType is "flt(64, IEEE)*" ,
//false if "flt(64, IEEE)"
string VarAlias = "Value";
解析这个的最佳方法是什么
我该怎么开始呢?最近我不得不做类似的事情 将每个数据块分解为记录这些是您的“组”吗?。使用正则表达式从每条记录中提取所需的每个元素
如果对数据没有更清晰的概念,我无法详细说明。一种解决方案可能是使用正则表达式。我很快就做了一个,但它可能需要一些额外的调整,以满足您的确切需要。它适用于您的示例,但对于其他输入可能会失败。表达式非常适合给定的示例,特别是在换行符和注释方面 代码
我认为您需要添加更多关于您试图解析的语言语法的细节。哪里需要支架?看起来这个序列——引入了注释——是真的吗?看起来,您可能能够使用某种有限状态自动机(例如regex)来解析这个问题,但根据语言的规则,您可能需要一个更复杂的lexer。