模板文件對比
前言
最近項目里涉及到相關數(shù)據(jù)文件的上傳與解析缓溅,整個過程的詳細流程及實現(xiàn)此處暫且不講蛇损,這里想談一下如何確定用戶上傳的文件是否能夠正常解析?
問題描述
換句話說坛怪,就是如何判斷用戶上傳的文件是否采用了提供的模板
比如說淤齐,你提供的模板是
姓名 | 年齡 | 身份證號 |
---|---|---|
張三 | 12 | XXXX |
而用戶上傳的是
姓名 | 科目 | 成績 |
---|---|---|
張三 | 12 | XXXX |
如何判斷,得出結論
問題分析
直接判斷袜匿,肯定非常困難匆骗,因為用戶上傳文件的類型可能有多種
同時無論是在 EXCEL
上還是在DBF
文件上直接對比模板和用戶上傳的文件都不容易
此時可以將用戶上傳的文件和模板文件進行轉換,轉化成統(tǒng)一的病毡、容易比較的層面進行對比(這里采用的是DataTable
)
代碼實現(xiàn)
1.解析模板(模板--->DataTable)
2.解析文件(文件--->DataTable)
以上兩步可以歸于一類镀迂,即實現(xiàn)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)
{
//如果列數(shù)不同,表結構肯定不同
if (initial.Columns.Count != test.Columns.Count)
{
return false;
}
//如果列數(shù)相同怪嫌,循環(huán)判斷是否每一列都存在
for (int i = 0; i < test.Columns.Count; i++)
{
if (!initial.Columns.Contains(test.Columns[i].ColumnName))
{
return false;
}
}
return true;
}