如何在使用FileHelpers库写入txt文件时修复ConvertException
本文关键字:文件 txt ConvertException FileHelpers | 更新日期: 2023-09-27 17:49:00
由于输入错误,我需要读取一个csv文件,该文件偶尔会在DateTime字段中包含int值。但我仍然需要保存这些值,以便以后可以将它们写入输出文件。
数据示例:
"517506","m","2012-11-07","LTU","4","m","0"
"517507","m","9","BLR","2","d","0"
一开始我以为问题出在阅读本身,但后来我注意到我得到了这个错误
Unhandled Exception: FileHelpers.ConvertException: Error Converting '9' to type: 'DateTime'. There are less chars in the Input String than in the Format string: 'yyyy-MM-dd'
当我试图在将输出写入.txt文件时将这些int值转换回DateTime值时。
如果有任何帮助,我将不胜感激。
我的代码:
static void Main(string[] args)
{
var engine = new FileHelperEngine<Citizen>();
var result = engine2.ReadFile(@"C:'registered_people.csv");
engine.WriteFile(@"C:'FileOut2.txt", result);
}
公民等级:
public class Citizen
{
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
public int? id;
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
[FieldNullValue("")]
public string gender;
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
[FieldNullValue(typeof(DateTime), "")]
[FieldConverter(ConverterKind.Date, "yyyy-MM-dd")]
public DateTime birthDate;
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
[FieldNullValue("")]
public string nationality;
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
public int? countyNo;
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
[FieldNullValue("")]
public string familyStat;
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
public int? children;
}
您有两个选项:
-
将它们作为
string
属性读取,并在导入记录后进行转换。您应该有两个类:CitizenSpec
,它是您的FileHelpers类,描述导入文件(具有公共string
字段以防止转换错误(;和Citizen
,它是您的真实类,具有属性、支持字段、方法、业务逻辑等。然后在engine.ReadFile
之后,使用循环或Linq将CitizenSpec
记录转换为Citizen
记录。 -
或者,提供您自己的容错
FieldConverter
,它定义了要忽略的无效输入。请参阅有关自定义转换器的文档。