如何在C#中验证CSV?

如何在C#中验证CSV?,c#,csv,C#,Csv,.NET中是否有一个内置的方法来验证csv文件/字符串 我更喜欢C#中的but。我做了一些研究,但我所发现的只是人们自己编写代码的例子(这些例子都是几年前编写的,可能已经过时) POC: 有!出于某种原因,它被隐藏在VB命名空间中,但它是.NET Framework的一部分,您只需要添加对Microsoft.VisualBasic程序集的引用。你要找的类型是 以下是如何验证文件的示例: using Microsoft.VisualBasic.FileIO; ... var path = @"C:

.NET中是否有一个内置的方法来验证csv文件/字符串

我更喜欢C#中的but。我做了一些研究,但我所发现的只是人们自己编写代码的例子(这些例子都是几年前编写的,可能已经过时)

POC:


有!出于某种原因,它被隐藏在VB命名空间中,但它是.NET Framework的一部分,您只需要添加对Microsoft.VisualBasic程序集的引用。你要找的类型是

以下是如何验证文件的示例:

using Microsoft.VisualBasic.FileIO;
...
var path = @"C:\YourFile.csv";
using (var parser = new TextFieldParser(path))
{
    parser.TextFieldType = FieldType.Delimited;
    parser.SetDelimiters(",");

    string[] line;
    while (!parser.EndOfData)
    {
        try
        {
            line = parser.ReadFields();
        }
        catch (MalformedLineException ex)
        {
            // log ex.Message
        }
    }
}

CSV解析器似乎也很有前途(但不是内置的):

相关线程:
我找到的最好的CSV阅读器是Lumenworks的:


非常快,功能非常全。建议使用。

您可以尝试解析它,如果成功,则它是有效的。就实际的语法验证和清理而言,您必须开发一些更健壮的方法,因为据我所知,没有任何方法可以为您验证它。在.NET中是否有针对CSV的内置验证?不,你想要什么样的验证?只需检查语法是否有效(列数等)或特定于域的内容?@HaukurHaf某种或多或少也会检查CSV格式规则(嵌入引号、逗号等)的内容。这家伙有一个类似的问题:这是一个了不起的发现!我从未意识到.Net Framework中的这些名称空间可能包含这样的宝石!这是否处理CSV的所有规则?(引号、嵌入逗号、换行符等)很好的发现。我对此一无所知@不幸的是,它不像我所知道的那样快。有趣的是:“,”不是德语csv的delimeter,而是“@JoeEnos它并没有达到RFC 4180(事实上的csv标准)的所有要求,您需要配置解析器来处理您的数据(例如,设置
parser.HasFieldsEnclosedInQuotes=true;
),但除了一些非常极端的情况外,它将处理换行,嵌入逗号等。
using Microsoft.VisualBasic.FileIO;
...
var path = @"C:\YourFile.csv";
using (var parser = new TextFieldParser(path))
{
    parser.TextFieldType = FieldType.Delimited;
    parser.SetDelimiters(",");

    string[] line;
    while (!parser.EndOfData)
    {
        try
        {
            line = parser.ReadFields();
        }
        catch (MalformedLineException ex)
        {
            // log ex.Message
        }
    }
}