由于输入错误,我需要读取偶尔在DateTime字段中具有int值的csv文件。但我仍然需要保存这些值,以便稍后将它们写入输出文件。
数据示例:
"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;
}
答案 0 :(得分:0)
您有两种选择:
将它们作为string
属性读取,并在导入记录后进行转换。您应该有两个类:CitizenSpec
这是您的FileHelpers类并描述导入文件(带有公共string
字段以防止转换错误);和Citizen
这是你的真正的类,包含属性,支持字段,方法,业务逻辑等。然后engine.ReadFile
使用循环或Linq转换{{1}记录到CitizenSpec
条记录。
或者提供您自己的容忍Citizen
,它定义要忽略的无效输入。请参阅the documentation on custom converters。