CsvHelper:.Net的开源CSV文件处理库

CsvHelper是Google搜索排名第一的CSV文件处理库(针对C#/.Net)。

  • 安装
    • 打开VisualStudio的Package Management Console
    • 输入如下命令:Install-Package CsvHelper
  • 映射
    • 创建CSV文件的列(根据列名或列的序号)到C#对象的属性(Property)的映射(Map)
    • 只支持到属性(Property)的映射,不支持字段(Field)
    • 具体映射的例子请参考:https://github.com/JoshClose/CsvHelper/wiki/Fluent-Class-Mapping
    • 支持列到属性的自定义转换,基本类型是自动转换的
    • 日期时间类型(Datetime)可以设定格式(Format)来支持非标准格式的字符串,比如将“20150401”转为日期时间类型:
      Map(m => m.TimeToMarket).Name("timeToMarket").TypeConverterOption("yyyyMMdd");
  • 配置
    • 正式读取CSV文件之前需要制定文件编码(Encoding),是否有列头(HasRecordHeader)
    • 重要的是注册之前自定义的【映射】,否则会出现“No properties are mapped for type”的异常。
      CsvHelper.Configuration.CsvConfiguration configuration = new CsvHelper.Configuration.CsvConfiguration();
      configuration.Encoding = System.Text.Encoding.UTF8;
      configuration.HasHeaderRecord = true;
      configuration.RegisterClassMap<StockCsvClassMap>();
    • 注意利用C#的Attribute指定映射的方式在CsvHelper 2.0之后已经被弃用了
      [CsvField( Name = "String Field" )]
  • 解析
    • 首先从待解析的文件创建一个CsvParser,并指定解析用的【配置】
      CsvHelper.Configuration.CsvConfiguration configuration = new CsvHelper.Configuration.CsvConfiguration();
      configuration.Encoding = System.Text.Encoding.UTF8;
      configuration.HasHeaderRecord = true;
      configuration.RegisterClassMap<StockCsvClassMap>();
    • CsvParser创建一个CsvReader
      CsvHelper.CsvReader csvReader = new CsvHelper.CsvReader(csvParser);
    • 可以分行读取,然后解析成一个对象
      csvReader.Read();
      var stock = csvReader.GetRecord<Stock>();
    • 也可以一次读取解析全部对象
      var stocks = csvReader.GetRecords<Stock>();
      
posted @ 2015-04-30 12:02  排骨虾  阅读(2725)  评论(0编辑  收藏  举报