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

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

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

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

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

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

它位于Microsoft.VisualBasic.FileIO.TextFieldParser

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

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

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

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

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

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

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

var streamReader = // Create a reader to your CSV file. var csvReader = new CsvReader( streamReader ); List myData = csvReader.GetRecords(); 

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

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

经过一番调查,还有以下内容: http : //www.filehelpers.com/

它似乎是一个完整的框架,阅读文件,而不仅仅是csv文件。

(注意:只是阅读网站上的内容,尚未使用它)

KBCsv是另一种选择,特别是如果您需要效率和处理大量CSV文件的能力。

披露:我写了KBCsv,因此是“KB”;)

我很确定你可以用一行代码将CSV文件读入DataTable。 一旦它在DataTable中,您就可以进行排序,过滤,迭代等。

这个问题有一些将CSV读入DataTables的例子。