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

时间:2016-06-25 18:37:24

标签: c# csv filehelpers

由于输入错误,我需要读取偶尔在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;

}

1 个答案:

答案 0 :(得分:0)

您有两种选择:

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

  2. 或者提供您自己的容忍Citizen,它定义要忽略的无效输入。请参阅the documentation on custom converters