【发布时间】:2010-11-09 08:43:52
【问题描述】:
在 .net 中,是否有应该用于读取 csv 文件的标准库?网络上的所有示例都使用自己的 csv 阅读器/解析器,或者使用 OleDb。
使用这些解决方案中的任何一个都不是问题,我只是想知道是否有一个普遍接受的库(不是我能找到的),或者任何其他“正确”的方式来做到这一点?
【问题讨论】:
-
这是作为另一个当前关闭的问题的副本链接的。我投票支持重新开放。
在 .net 中,是否有应该用于读取 csv 文件的标准库?网络上的所有示例都使用自己的 csv 阅读器/解析器,或者使用 OleDb。
使用这些解决方案中的任何一个都不是问题,我只是想知道是否有一个普遍接受的库(不是我能找到的),或者任何其他“正确”的方式来做到这一点?
【问题讨论】:
试试CsvHelper(我维护的一个库)。也可以通过NuGet 获得。
CsvHelper 允许您将 CSV 文件直接读取到您的自定义类中。
var streamReader = // Create a reader to your CSV file.
var csvReader = new CsvReader( streamReader );
List<MyCustomType> myData = csvReader.GetRecords<MyCustomType>();
CsvReader 将根据标题行自动找出如何匹配属性名称(这是可配置的)。它使用编译的表达式树而不是反射,所以速度非常快。
它还具有很强的可扩展性和可配置性。
【讨论】:
KBCsv 是另一种选择,特别是如果您需要效率和处理大量 CSV 文件的能力。
披露:我写了 KBCsv,因此是“KB”;)
【讨论】:
VB 命名空间有一个很棒的TextFieldParser 类。我知道,c# 人们不喜欢从那种“基本”语言中引用库,但它非常好。
它位于 Microsoft.VisualBasic.FileIO.TextFieldParser
我过去常常弄乱 OLEDB,创建列定义文件等 - 但发现 TextFieldParser 是解析任何分隔文件的非常简单方便的工具。
【讨论】:
许多人自己编写的原因之一是 CSV 并不是那么简单。例如:
这些是一些人们编写自己的解析器的原因,因为他们被困在阅读使用所有这些不同设置创建的文件。或者他们编写自己的序列化程序,因为目标系统有很多这些特质。
如果您不关心这些问题,只需使用最方便的库即可。但要明白他们就在那里。
【讨论】:
【讨论】:
CsvReader 是一个相当不错的...它不是 Microsoft,但它运行良好,并且比某些替代品(旧版 OleDb 等)快得多。
【讨论】:
我很确定您可以使用一行代码将 CSV 文件读入 DataTable。一旦它在 DataTable 中,您就可以排序、过滤、迭代等。
This question 有一些将 CSV 读入 DataTables 的示例。
【讨论】: