继上篇文章分析了关于主模板的流程,现在来分析一下关于子模板的分析流程:
第一步:
定义一个MainDatatable,然后为它分配四个字段:
Templetcatecode 站位详细2. Templetname 枚举名称 3. PlACE 编码位置4.EXPRESSION编码表达式
第二步:
判断stemplate(模板)sname(名称站位)STRAIN(车型站位)senum(模板说明)
1.sname(名称站位)不为空
把相应的数值加到MainDatatable中
然后创建 物资名称表, 添加两个字段 ID和 NAME
取模板说明中 第一个{}中的数据,进行循环赋值 形式如下图:
然后将 物资名称表 加到MainDatatable中
2.STRAIN(车型站位)不为空(原理同上)
把相应的数值加到MainDatatable中
然后创建 车型表,添加两个字段 ID和 NAME
取模板说明中的数据,进行循环赋值 形式如下图:
然后将 车型表 加到MainDatatable中
3.stemplate(模板)不为空,
由于子模板的形式比较多,先写出一种形式的解析过程。
解析子模板:
1::[直径(mm),S*100,2,4] [全长(mm),S]×[刃长(mm),S]
第一步:
如果子模板中有 ::这样的符号 就将其去除
[直径(mm),S*100,2,4] [全长(mm),S]×[刃长(mm),S]
第二步:
将其按照 ] 符号转化为数组形式的数据 代码如下:
string[] Arrstemplates = strstemplate.Split(']');
第三步:
实例化stru_tmplcontent,形成数组,在下面的循环解析过程中,为其赋值。
循环解析数组中的数据(大循环 int i = 0; i < Arrstemplates.Length - 1; i++)。
比如第一条数据:[直径(mm),S*100,2,4]
这次是以 ,符号为分隔符 代码如下
string[] arrItem = Arrstemplates[i].Split(',');
第四步:
对上面的数据长度进行判断:
如果大于1 则将数组中[1]的值赋给stru_tmplcontent[0]的strMS属性。
否则 stru_tmplcontent[0]的strMS属性直接赋值”F”
如果大于2 则将数组中[2]的值赋给stru_tmplcontent[0]的strMS属性。
如果等于3 则将数组中[2]的值赋给stru_tmplcontent[0]的strMS属性。
如果大于3 则将数组中[3]的值赋给stru_tmplcontent[0]的strMS属性。
上面依次为strMS赋值结束后 最终结果 stru_tmplcontent[0].strMS = S*100,2,4
第五步:
在大循环中定义一个小循环(int j = 0; j < arrItem.Length; j++)。
第六步:
循环判断 arrItem[0] ”[直径(mm),S*100,2,4” 将其拆分 赋值
stru_tmplcontents[0].strStart = “”
stru_tmplcontents[0].smbmc =直径(mm)
stru_tmplcontents[0].smblx = S (包括S和M)
stru_tmplcontents[0].smboper=*(包括加减乘除运算符)
stru_tmplcontents[0].nmbxs=100
stru_tmplcontents[i].nstart=2
stru_tmplcontents[i].nend = 4
综上所述,这是一次嵌套循环,只是解析下面信息
[直径(mm),S*100,2,4] [全长(mm),S]×[刃长(mm),S]中的 [直径(mm),S*100,2,4]
还需要三次循环才能将所有信息全部解析。
解析完毕 会把所有信息依次赋给stru_tmplcontent数组。
然后对stru_tmplcontent数组进行循环判断
判断 stru_tmplcontents的属性nstart 和nend 是否为空 代码如下
(stru_tmplcontents[i].nstart + "," + stru_tmplcontents[i].nend != ",")
将数组中的信息依次加到MainDatatable中,如下图所示:
对数组属性 smbmc和smblx 进行判断 是否是枚举类型
如果是枚举类型 为其创建模板名称命名的Datatable,然后创建两个字段 ID, NAME
对smbmc属性进行判断,判断属性是否存在英文”(“和中文”(” 然后为名称后面加上 :
在模板说明中去除 ”名称:”,将余下部分进行数组转化,为上面新创建的datatable进行循环赋值。
最后把Datatable加到MainDatatable中,如图所示(模板名称是粒度):
后续有关于模板测试的分析流程,敬请期待。