【问题标题】:How to validate CSV in C#?如何在 C# 中验证 CSV?
【发布时间】:2014-07-15 18:25:13
【问题描述】:

.NET 中是否有内置方法可以验证 csv 文件/字符串?

我更喜欢 this online csv validator 之类的东西,但在 C# 中。我做了一些研究,但我发现的只是人们自己编写代码的例子(例子都是几年前写的,可能已经过时了)。

POC:

bool validCSV = CoolCSV_ValidatorFunction(string csv/filePath);

【问题讨论】:

  • 您可以尝试解析它,如果解析成功,则它是有效的。就实际的语法验证和清理而言,您将不得不开发一些更强大的东西,因为据我所知,没有一种方法可以为您验证它。
  • .NET 中是否有内置的 CSV 验证?不,您需要什么样的验证?只需检查语法是否有效(nr 列等)或特定领域的内容?
  • @HaukurHaf 或多或少也会检查 CSV 格式规则(嵌入引号、逗号等)的东西。
  • 这个人也有类似的问题:stackoverflow.com/questions/9642055/…

标签: c# csv


【解决方案1】:

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

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

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
        }
    }
}

【讨论】:

  • 这是一个了不起的发现!我从来没有意识到 .Net Framework 中的这些命名空间可能包含这样的宝石!
  • 这是否处理 CSV 的所有规则? (引号、嵌入的逗号、换行符等)
  • 不错的发现。不知道这个!
  • @JoeEnos 不幸的是,它没有我知道的那么快。为了好玩:“,”不是德语 csv 的分隔符,而是“;”
  • @JoeEnos 它并没有达到所有 RFC 4180(事实上的 CSV 标准),您需要配置解析器以处理您的数据(例如,设置 parser.HasFieldsEnclosedInQuotes = true;),但除了对于一些真正存在的极端情况,是的,它将处理换行符、嵌入式逗号等。
【解决方案2】:

我发现的最好的 CSV 阅读器是 Lumenworks 的这个:

http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader

非常快,功能非常齐全。推荐。

【讨论】:

    【解决方案3】:

    CSV 解析器似乎也很有希望(虽然不是内置的): http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader

    相关话题: CSV Parsing Options with .NET

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多