我正在为一些我不确定是由于错误或不完整的对象设置和属性而苦苦挣扎。
我正在使用 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[];
这是一个数据样本;
"OGEA03181733",新建,05/11/2012 13:00:00,05/11/2012 17:00:00
但是日期格式直到运行时才知道(**为了说明目的,我在下面的代码中对格式进行了硬编码)所以我使用了 DelimitedClassBuilder 如下
public class Job
{
public string WM_Identifier;
public string JobDesription;
public DateTime? Job_Start_Date_Time;
public DateTime? Job_End_Date_Time;
}
DelimitedClassBuilder cb = new DelimitedClassBuilder("Job", ",");
cb.IgnoreEmptyLines = true;
cb.IgnoreFirstLines = 1;
string[] ClassBuilderFields1 = {"WM_Identifier","JobDescription"};
foreach (string myFieldName in ClassBuilderFields1)
{
cb.AddField(myFieldName, typeof(String));
cb.LastField.QuoteMode = QuoteMode.OptionalForBoth;
cb.LastField.QuoteMultiline = MultilineMode.AllowForBoth;
}
string dataDateFormat = "dd/MM/yyyy"; //**
string dataTimeFormat = "HH:mm:ss"; //**
string[] variableDateTimeFields = { "Job_Start_Date_Time", "Job_End_Date_Time"};
foreach (string myFieldName in variableDateTimeFields)
{
cb.AddField(myFieldName, typeof(DateTime));
cb.LastField.FieldNullValue = DateTime.Today;
cb.LastField.Converter.Kind = ConverterKind.Date;
cb.LastField.Converter.Arg1 = string.Format("{0} {1}", dataDateFormat, dataTimeFormat);
}
当我现在处理时,我收到以下错误
在第 2 行的字段 'JobDescription' 之后找不到分隔符 ',' (记录的字段较少,分隔符错误或下一个字段必须标记为可选
如果我将作业描述放在引号中,它可以使用类生成器处理得很好,但是数据是由客户提供的,所以我无法控制(因此出现了日期格式问题!!)。我在这两种情况下都检查了引擎的属性,但找不到差异。无论职位描述是引用还是未引用,内联解决方案都有效,但等效(如我所见)类构建器版本仅在引用职位描述时才有效。
谢谢你的帮助。我觉得 FileHelpers 是一项巨大的资产,因此如果可以找到答案,我更愿意坚持使用这种方法。