模板文件对比
前言
最近项目里涉及到相关数据文件的上传与解析,整个过程的详细流程及实现此处暂且不讲,这里想谈一下如何确定用户上传的文件是否能够正常解析?
问题描述
换句话说,就是如何判断用户上传的文件是否采用了提供的模板
比如说,你提供的模板是
姓名 | 年龄 | 身份证号 |
---|---|---|
张三 | 12 | XXXX |
而用户上传的是
姓名 | 科目 | 成绩 |
---|---|---|
张三 | 12 | XXXX |
如何判断,得出结论
问题分析
直接判断,肯定非常困难,因为用户上传文件的类型可能有多种
同时无论是在 EXCEL
上还是在DBF
文件上直接对比模板和用户上传的文件都不容易
此时可以将用户上传的文件和模板文件进行转换,转化成统一的、容易比较的层面进行对比(这里采用的是DataTable
)
代码实现
1.解析模板(模板--->DataTable)
2.解析文件(文件--->DataTable)
以上两步可以归于一类,即实现DBF文件或EXCEL文件的解析和封装
DBF文件的解析与封装参见C#封装DBF文件到DataTable
EXCEL文件的解析与封装参见C#封装EXCEL文件到DataTable
3.模板文件对比
/// <summary>
/// 判断两个DataTable是否具有相同的表结构
/// </summary>
/// <param name="initial">基准DataTable</param>
/// <param name="test">要测试的DataTable</param>
/// <returns></returns>
public static Boolean IsSameFormat(DataTable initial, DataTable test)
{
//如果列数不同,表结构肯定不同
if (initial.Columns.Count != test.Columns.Count)
{
return false;
}
//如果列数相同,循环判断是否每一列都存在
for (int i = 0; i < test.Columns.Count; i++)
{
if (!initial.Columns.Contains(test.Columns[i].ColumnName))
{
return false;
}
}
return true;
}