是否有"正确"的方式来读取CSV文件

Gar*_*eth 17 .net c# csv oledb

可能重复:
CSV文件导入.Net

在.net中,是否有一个标准库应该用于读取csv文件?Web上的所有示例都会使用自己的csv阅读器/解析器,或者使用OleDb.

使用任何这些解决方案都不是问题,我只是想知道是否有一个普遍接受的库(不是我能找到的),或者其他任何"正确"的方法吗?

Mar*_*ell 18

CsvReader是一个非常好的...它不是微软,但它运行得很好,并且比一些替代品(传统的OleDb等)快得多.

  • 我实际上要看看这些人是否想要我的代码更改,而不是自己维护它... (7认同)

lav*_*nio 10

许多人自己编写的原因之一是CSV并不那么简单.例如:

  1. 第一行是否包含字段名称?
  2. 你支持约会吗?如果他们引用,在某个日 - 月 - 年订单中被#标记包围?
  3. 它是否支持在引用文本值内出现的换行符?或者这会分裂记录吗?
  4. 你怎么逃避引用字符串中的引用?你是否加倍引用,或使用反斜杠或其他转义字符?
  5. 支持哪些字符编码?
  6. 它如何处理转义控制字符?&#XX; 或\ uXXXX或其他一些方法?

这些是人们编写自己的解析器的一些原因,因为它们无法读取使用所有这些不同设置创建的文件.或者他们编写自己的序列化程序,因为目标系统有一堆这些特性.

如果您不关心这些问题,只需使用最方便的库.但要明白他们在那里.

  • 这些听起来都是很好的理由*不是*自己编写,除非你想重复其他人已经犯过的错误(并且可能已修复). (11认同)

aSk*_*ker 10

VB命名空间有一个很棒的TextFieldParser类.我知道,c#人不喜欢用这种"基本"语言来引用库,但它非常好.

它位于Microsoft.VisualBasic.FileIO.TextFieldParser

我曾经搞乱OLEDB,创建列定义文件等 - 但是发现TextFieldParser是一个非常简单和方便的工具,用于解析任何分隔文件.

  • @Thomas:VB程序员期望易于使用的字符串解析函数,而C风格的程序员期望在字符串方面遭受可怕的损失. (8认同)
  • 是的,我也喜欢这个类......但我真的很想知道为什么MS把它放在一个特定于VB的程序集中,它没有任何意义! (3认同)
  • 我刚刚发现这个课程,这正是我所寻求的.它内置,易于使用,并使用引号处理带分隔的字段.当您不需要复杂的解决方案时,我推荐它,特别是在对第三方库不太开放的环境中工作时. (2认同)

Jos*_*ose 7

尝试CsvHelper(我维护的库).它也可以通过NuGet获得.

CsvHelper允许您直接将CSV文件读入自定义类.

var streamReader = // Create a reader to your CSV file.
var csvReader = new CsvReader( streamReader );
List<MyCustomType> myData = csvReader.GetRecords<MyCustomType>();
Run Code Online (Sandbox Code Playgroud)

CsvReader将根据标题行自动确定如何匹配属性名称(这是可配置的).它使用编译的表达式树而不是反射,所以它非常快.

它也是非常可扩展和可配置的.