处理TXT中的数据规则
场景:
如下图所示,在验证“提示:输入”后面的E开头的数据是将被处理的数据之后,将“提示”下面的同名称的英文别名的第一列的数据作处理,只取一个最大值与一个最小值,然后绑定到前端页面中。
.
.
.
思路:
- 读取完整个txt的数据后,先对每个内容块[begin-end]的第一行是否是begin做判断。
- 接着判断“输入”后面的号码是不是要进行数据处理的号码。
- 然后将这个号码所属的内容块导入一个临时表Tab1中,内置两列,内容块的别名以及第一列的数据。
对Tab1进行处理,声明两个list,一个存放遍历Tab1过的别名nameList,一个存放相同别名的数据valueList,用表自身别名遍历这个Tab1,每遍历完一个别名,对这个别名中的valueList数据进行排序,取其中一个最大与最小值,并将其别名与两个值放置在Tab2中,然后将这个别名存放在nameList中,用于判断下一个别名是不是相同的,是否被遍历过。
(考虑:是否可以将Tab2中别名作为遍历记录的参照物?)将Tab2中的别名更改为符合数据库规则的名称,这里参照了一个规则名称对应表。
- 更完名之后,对应要传值到页面的表格Tab3(内含其他的内容)的名称,将最大值与最小值传入这个Tab3中的特定地方,绑定Tab3到页面中。
代码:
//datacollection为读取完txt内容的string[]数组
for (int everyindex = 0; everyindex < datacollection.Length; everyindex++)
{
//当内容块的第一行为begin时,开始对内容块进行处理
if (datacollection[everyindex].Trim().Contains("BEGIN"))
{
//当读取到号码时,判断txt文件中的号码是否是要处理的
if ((datacollection[everyindex+1].Trim()).Contains(runmdno))
{
//第一步:将内容块别名、第一列数据转移到Tab1中
#dealTal1
//第二步:从Tab1中经过处理,获取最小最大值,放入Tab2中
#getValueToTab2
//第三步:更换Tab2的别名
#changeTab2Name
//第四步:将对应名字的值传递到页面的表格Tab3中,绑定页面
#dealTab3
}
}
}
//遍历完所有的内容块之后,将页面表Tab3绑定到页面中
this.grdv_Record.DataSource = Tab3;
this.grdv_Record.DataBind();
第一步:’#’dealTal1(将内容块别名、第一列数据转移到Tab1中)
//开始循环读取txt别名以及数据,以及实现txt数据转移到临时表tab1中
for (int temp = everyindex+1; temp < datacollection.Length; temp++)
{
DataRow txtRow = Tab1.NewRow();
//txt文件中每一个tab都是一个'/t',因此要切分他们
tempsplits = datacollection[temp].Trim().Split(new char[] { '\t', '"' }, StringSplitOptions.RemoveEmptyEntries);
//直到读取end时,内容块结束循环
if (tempsplits.Length > 1 && !datacollection[temp].Trim().Contains("END"))
{
if (!datacollection[temp].Trim().Contains("提示"))
{
//将txt文档中的每一行数据都放到一个getDataFromTxtTab的表格中
txtRow["txtName"] = tempsplits[0].Trim();
txtRow["txtValue"] = tempsplits[1].Trim();
Tab1.Rows.Add(txtRow);
}
else
{
continue;
}
}
else
{
//用当前循环的位置替代外层循环的位置
everyindex = temp;
break;
}
}
第二步:’#’getValueToTab2(从Tab1中经过处理,获取最小最大值,放入Tab2中)
//数组,用于记录要筛选最大值与最小值的数据和处理过的数据名称
List<string> txtNameList = new List<string>();
for (int tab1Num = 0; tab1Num < Tab1.Rows.Count; tab1Num ++)
{
DataRow deliverRow = Tab2.NewRow();
List<double> txtValueList = new List<double>();
//将临时表的每一个项目名字遍历一遍表本身,获取该项目名字的所有测量数据
string txtName1 = Tab1.Rows[tab1Num]["txtName"].ToString().Trim();
bool isExit = false;
//该循环用于判断该项目名称是否在list中存在,存在则是被处理过的数据
for (int listNum = 0; listNum < txtNameList.Count; listNum++)
{
if (txtName1 != txtNameList[listNum])
{
continue;
}
else
{
isExit = true;
break;
}
}
if (!isExit)
{
for (int txtNum = tab1Num ; txtNum < Tab1.Rows.Count; txtNum++)
{
string txtName2 = Tab1.Rows[txtNum]["txtName"].ToString().Trim();
if (txtName1 == txtName2)
{
//将相同项目名称的数据放在list中
txtValueList.Add(Convert.ToDouble(Tab1.Rows[txtNum]["txtValue"].ToString()));
}
}
//将已经遍历过的项目名称记录在NameList当中
txtNameList.Add(txtName1);
deliverRow["txtName"] = txtName1;
//获取同名字项目的最大最小值,并放置到传递表的相应的卷数中
if (txtValueList.Count > 1)
{
//获取最大最小值的方法:#getMinNum()/#getMaxNum()
deliverRow["minValue"] = getMinNum(txtValueList);
deliverRow["maxValue"] = getMaxNum(txtValueList);
}
else
{
deliverRow["maxValue"] = txtValueList[0];
}
//获取的最大最小值放在tab2中
Tab2.Rows.Add(deliverRow);
}
}
第三步:’#’changeTab2Name(更换Tab2的别名)
//更换传递表txt的英文项目名称为数据库中对应的itemno
for (int deliverNum = 0; deliverNum < deliverDataTab.Rows.Count; deliverNum++)
{
//与数据库的名称对应表itemTxtTab
for (int itemNum = 0; itemNum < itemTxtTab.Rows.Count; itemNum++)
{
{
Tab2.Rows[deliverNum]["items"] = itemTxtTab.Rows[itemNum]["items"].ToString();
Tab2.Rows[deliverNum]["txtName"] = itemTxtTab.Rows[itemNum]["itemno"].ToString();
break;
}
}
}
第四步:’#’dealTab3(将对应名字的值传递到页面的表格Tab3中,绑定页面)
for (int deliverNum = 0; deliverNum < Tab2.Rows.Count; deliverNum++)
{
for (int pageNum = 0; pageNum < Tab3.Rows.Count; pageNum++)
{
string deliverName = Tab2.Rows[deliverNum]["txtName"].ToString().Trim();
string pageName = Tab3.Rows[pageNum]["itemno"].ToString().Trim();
string deliverItems = Tab2.Rows[deliverNum]["items"].ToString().Trim();
string pageItems = Tab3.Rows[pageNum]["items"].ToString().Trim();
//其他量度项的时候,通过对明项目名称items来判断是否与传递表的项目名称一致
if (deliverName.Equals(pageName) || deliverItems.Equals(pageItems))
{
tab3.Rows[pageNum]["PminVal"] = tab2.Rows[deliverNum]["minValue"].ToString();
tab3.Rows[pageNum]["PmaxVal"] = tab2.Rows[deliverNum]["maxValue"].ToString();
break;
}
}
}
至此,就完成了对txt内容的解析。