如何在使用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;
}

如何在使用FileHelpers库写入txt文件时修复ConvertException

您有两个选项:

  1. 将它们作为string属性读取,并在导入记录后进行转换。您应该有两个类:CitizenSpec,它是您的FileHelpers类,描述导入文件(具有公共string字段以防止转换错误(;和Citizen,它是您的真实类,具有属性、支持字段、方法、业务逻辑等。然后在engine.ReadFile之后,使用循环或Linq将CitizenSpec记录转换为Citizen记录。

  2. 或者,提供您自己的容错FieldConverter,它定义了要忽略的无效输入。请参阅有关自定义转换器的文档。