C# 使用带FileHelper的DelimitedClassBuilder的无引号空格

C# 使用带FileHelper的DelimitedClassBuilder的无引号空格,c#,csv,filehelpers,C#,Csv,Filehelpers,我正在努力解决一些问题,我不确定这是由于一个bug或不完整的对象设置和属性造成的 我正在使用FileHelpers处理CSV文件 如果我使用内联属性处理数据,如下所示,一切都很好 [IgnoreFirst(1)] [IgnoreEmptyLines()] [DelimitedRecord(",")] public class Job { [FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.AllowForBoth)]

我正在努力解决一些问题,我不确定这是由于一个bug或不完整的对象设置和属性造成的

我正在使用FileHelpers处理CSV文件

如果我使用内联属性处理数据,如下所示,一切都很好

[IgnoreFirst(1)]
[IgnoreEmptyLines()]
[DelimitedRecord(",")]
public class Job
{
    [FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.AllowForBoth)]
    public string WM_Identifier;
    [FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.AllowForBoth)]
    public string JobDesription;
    [FieldConverter(ConverterKind.Date, "dd/MM/yyyy HH:mm:ss")]
    public DateTime? Job_Start_Date_Time;
    [FieldConverter(ConverterKind.Date, "dd/MM/yyyy HH:mm:ss")]
    public DateTime? Job_End_Date_Time;
}
处理

        FileHelperEngine<Job> engine = new FileHelperEngine<Job>();
        engine.ErrorManager.ErrorMode = ErrorMode.ThrowException;
        engine.SetProgressHandler(ProgressChangeHandler, ProgressMode.NotifyRecords);

        _parsedJobs = engine.ReadFile(dlgOpen.FileName) as Job[];
当我现在处理时,我得到以下错误

在第2行的字段“JobDescription”后找不到分隔符“”。记录的字段较少,分隔符错误,或者必须将下一个字段标记为可选字段

如果我把作业描述放在引号中,它可以用类生成器处理,但是数据是由客户提供的,所以我没有控制权,因此出现了日期格式问题!!。我在两种情况下都检查了发动机的性能,但都没有发现差异。内联解决方案可以工作,无论工作描述是引用还是未引用,但在我看来,只有在引用工作描述的情况下,类生成器版本才会工作


谢谢你的帮助。我觉得FileHelpers是一项巨大的资产,因此如果能找到答案,我更愿意坚持使用这种方法。

在ClassBuilder中看起来是个问题,我将创建测试用例并尝试解决这个问题,但同时我强烈建议您使用这种方法:

将日期字段读取为字符串,然后在运行时以正确的格式处理它们:

[IgnoreFirst(1)]
[IgnoreEmptyLines()]
[DelimitedRecord(",")]
public class Job
{
    [FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.AllowForBoth)]
    public string WM_Identifier;
    [FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.AllowForBoth)]
    public string JobDesription;

    public string Job_Start_Date_Time;
    public string Job_End_Date_Time;
}

Chhers

您需要使用

Type dynamicallyCreatedRecordClass = cb.CreateRecordClass();
然后用动态创建的类创建一个非泛型引擎

FileHelperEngine engine = new FileHelperEngine(dynamicallyCreatedRecordClass);
当您将示例中的文件读入DataTable时,这是获取数据值的一种方法。无法使用作业[],因为引擎不是基于作业,而是基于dynamicallyCreatedRecordClass.GetType

ReadFileAsDT对于3.2版已过时
FileHelperEngine engine = new FileHelperEngine(dynamicallyCreatedRecordClass);
DataTable _parsedJobs = engine.ReadFileAsDT(dlgOpen.FileName);