CsvHelperの簡単な日付変換で読み込む
CsvHelper 12.2.1
読み込むCSVの日付列が"20190101"のような形式だった時、属性で変換を指定して読み込む方法。
書き込みもたぶん同じ。試してない。
最初はClassMapを書いて読み込みをしていたが、日付を形式変換するためにClassMapを書くのは面倒だなと思って調べてたら、AttributesにFormatがあるなと気づいた話。
CsvHelper.Configuration.Attributes Namespace
100列とかあったとき、数列のためにClassMapを書くのはつかれるのでちょっとは楽になった。
ただ、何かに影響するかは知らない。
最初に書いていたソース
//File,Encoding,HasHeaderRecordはどっかで設定publicIEnumerable<CSV_Format>GetRecords(){try{using(varreader=newStreamReader(File,Encoding.GetEncoding(EncodingName)))using(varcsv=newCsvReader(reader)){csv.Configuration.HasHeaderRecord=HasHeaderRecord;csv.Configuration.RegisterClassMap<CSV_Format_Mapper>();returncsv.GetRecords<CSV_Format>();}}catch(Exceptionex){//..例外処理..}}classCSV_Format_Mapper:ClassMap<CSV_Format>{publicCSV_Format_Mapper(){Map(x=>x.col1).Index(1);Map(x=>x.col2).Index(2);Map(x=>x.col4).Index(4).TypeConverterOption.Format("yyyyMMdd");Map(x=>x.col6).Index(6);}}classCSV_Format{publicstringcol1{get;set;}publicintcol2{get;set;}publicDateTimecol4{get;set;}publicdecimalcol6{get;set;}}Attributesを使ったソース
CSV_Format_Mapperを書かなくていい!
//File,Encoding,HasHeaderRecordはどっかで設定publicIEnumerable<T>GetRecords(){try{using(varreader=newStreamReader(File,Encoding.GetEncoding(EncodingName)))using(varcsv=newCsvReader(reader)){csv.Configuration.HasHeaderRecord=HasHeaderRecord;//csv.Configuration.RegisterClassMap<CSV_Format_Mapper>(); //いらなくなったreturncsv.GetRecords<T>();}}catch(Exceptionex){//..例外処理..}}classCSV_Format{[Index(1)]publicstringcol1{get;set;}[Index(2)]publicintcol2{get;set;}[Index(3),Format("yyyyMMdd")]publicDateTimecol4{get;set;}[Index(4)]publicdecimalcol6{get;set;}}