如何使用C#验证asp.net中的csv文件
本文关键字:中的 csv 文件 net asp 何使用 验证 | 更新日期: 2023-09-27 18:19:52
我正在上传csv文件并将数据保存到数据库中。我已经完成了保存部分,但我需要的是用正确的数据农场验证csv。
-----------------------------------------------
Name Address Age Gender
---------------------------------------------
a Hyderabad 23 M
b Banglore 25 F
c Mumbai 26 M
---------------------------------------------
csv文件中的数据在上传时需要采用上述格式。如果他们以以下格式输入数据并试图上传,则需要显示一条错误消息,上面写着"上传有效CSV文件"。
-----------------------------------------------
Name Address (Column Name Is missing) Gender| Column0
--------------------------------------------
a Hyderabad 23 M ( Some Junk Data)
b Banglore 25 F |
c Mumbai 26 M |
---------------------------------------------
--------------------------------------------
Xyz olp
-------------------------------------------
我在谷歌上搜索了很多,但没有找到适合我问题的有效链接。
这不会有灵丹妙药。通过设计CSV,如果它是流动的,那么你将无法像验证xml文件一样验证它。
但是你可以做一些事情,例如:
public void ValidateCsv(string fileContents)
{
var fileLines = fileContents.Split(
new string[] { "'r'n", "'n" }, StringSplitOptions.None);
if (fileLines.Count < 2)
//fail - no data row.
ValidateColumnHeader(fileLines[0]);
ValidateRows(fileLines.Skip(1));
}
public bool ValidateColumnHeaders(string header)
{
return header.Trim().Replace(' ','').ToLower() ==
"name,address,age,gender";
}
public bool ValidateRows(IEnumerable<string> rows)
{
foreach(row in rows)
{
var cells = row.Split(',');
//check if the number of cells is correct
if (!cells.Length == 4)
return false;
//ensure gender is correct
if (cells[3] != "M" && cells[3] != "F")
return false;
//perform any additional row checks relevant to your domain
}
}
大多数验证都是针对您的业务领域的,因此您需要自己决定什么是"坏数据"。例如,您可以检查Age
列是否为正数。
使用正则表达式。如果你在csv文件中的每一行都有一个特定的模板,我认为regex是最好的解决方案。这里有一个例子:
Template: 12345[tab]String(20 chars)[tab]String(1 char an one of these: M,N,O)
Regex: ^[0-9]{1,5}(' ){0,4}'t.{20}'t[MNO]$
Lines:
12345 abcdefg M --->Match
54345 abcdefg ghft O --->Match
12 vfjnvfjn vfjnvfn K --->No Match because it is faulty
12 vfjnvfjn vfjnvfn N --->Match
我建议使用CsvHelper,它是一个很棒的CSV库,有一些方法可以处理格式错误的CSV,如下所示:https://github.com/JoshClose/CsvHelper
查看文档:
http://joshclose.github.io/CsvHelper/
有一个示例,当CSV格式错误时,如何读取文件并执行操作:
var csv = new CsvReader( textReader );
while( csv.Read() )
{
int intField;
if( !csv.TryGetField( 0, out intField ) )
{
// Do something when it can't convert.
}
}
请务必查看上面链接上的文档,有一个选项可以忽略读取异常:
csv.Configuration.IgnoreReadingExceptions = true;