使用FileHelpers库版本3.0.1。
假设您定义了一个要从csv文件导入的字段,如下所示:
[FieldTrim(TrimMode.Both)]
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
[FieldConverter(ConverterKind.Date, "d-MMMM-yyyy")]
public DateTime DOB;
现在,csv字段应采用日期格式“ d-MMMM-yyyy”,并在编译时设置。我在运行时有一个要求(有时)将此格式更改为“ d-MMMM-yy”。
使用的格式取决于源文件-有些文件有2位数字的年份,另一些文件有4位数字的年份。我将在程序启动时知道使用哪种格式。
FileHelpers有可能吗?我想我可以像这样添加一个字符串列:
[FieldTrim(TrimMode.Both)]
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
public string DOBAsString;
,并让FileHelpers将该数据读取到该字段中,然后自己循环将其转换为DOB字段。有没有更清洁的方法?
最简单的方法是使用ConverterKind.DateMultiFormat
而不是ConverterKind.Date
[FieldTrim(TrimMode.Both)]
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
[FieldConverter(ConverterKind.DateMultiFormat, "d-MMMM-yyyy", "d-MMMM-yy"]
public DateTime DOB;
通常,在运行时指定格式的另一种方法是将运行时类与ClassBuilder一起使用:
FixedClassBuilder cb = new FixedLengthClassBuilder("Customers");
cb.AddField("DOB", 8, typeof(DateTime));
cb.LastField.Converter.Kind = ConverterKind.Date;
cb.LastField.Converter.Arg1 = "d-MMMM-yyyy"; // or whatever
cb.LastField.TrimMode = TrimMode.Both;
cb.LastField.FieldNullValue = DateTime.Now;
engine = new FileHelperEngine(cb.CreateRecordClass());
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句