用C#解析C#中的CSV文件

有没有一种默认/官方/推荐的方式来解析C#中的CSV文件? 我不想推出我自己的解析器。

此外,我还看到过有人使用ODBC / OLE DB通过Text驱动程序读取CSV文件,很多人因为它的“缺点”而不愿意这样做。 这些缺点是什么?

理想情况下,我正在寻找一种方法,通过它可以按列名称读取CSV,并使用第一条记录作为标题/字段名称。 一些给出的答案是正确的,但基本上将文件反序列化为类。


让图书馆为您处理所有细节问题! :-)

检查FileHelpers并保持干爽 - 不要重复自己 - 无需重新发明轮子gazillionth时间....

您基本上只需要通过公共类(以及诸如默认值,替换NULL值等精心设计的属性)来定义数据的形状(CSV中各行中的字段),点文件中的FileHelpers引擎以及宾果 - 您将从该文件中取回所有条目。 一个简单的操作 - 卓越的性能!


CSV解析器现在是.NET Framework的一部分。

添加对Microsoft.VisualBasic.dll的引用(在C#中正常工作,不介意名称)

using (TextFieldParser parser = new TextFieldParser(@"c:temptest.csv"))
{
    parser.TextFieldType = FieldType.Delimited;
    parser.SetDelimiters(",");
    while (!parser.EndOfData)
    {
        //Process row
        string[] fields = parser.ReadFields();
        foreach (string field in fields)
        {
            //TODO: Process field
        }
    }
}

文档在这里 - TextFieldParser类


CsvHelper(我维护的一个库)会将CSV文件读入自定义对象。

var csv = new CsvReader( File.OpenText( "file.csv" ) );
var myCustomObjects = csv.GetRecords<MyCustomObject>();

有时候你并不拥有你想要阅读的对象。 在这种情况下,您可以使用流畅映射,因为您无法在类上放置属性。

public sealed class MyCustomObjectMap : CsvClassMap<MyCustomObject>
{
    public MyCustomObjectMap()
    {
        Map( m => m.Property1 ).Name( "Column Name" );
        Map( m => m.Property2 ).Index( 4 );
        Map( m => m.Property3 ).Ignore();
        Map( m => m.Property4 ).TypeConverter<MySpecialTypeConverter>();
    }
}
链接地址: http://www.djcxy.com/p/45475.html

上一篇: Parsing CSV files in C#, with header

下一篇: Stop Excel from automatically converting certain text values to dates