3

我正在使用File Helpers 2.9.9,我想知道如何让它跳过坏记录而不是崩溃?

object[] transactions = engine.ReadStream(textReader); // will crash if one record fails.

我也遇到了 DateTime 问题。我不明白为什么它不能使用我设置的格式转换“12/22/2011”。

Error Converting '"12/22/2011"' to type: 'DateTime'.  does not match any of the given formats: 'MM/dd/yyyy', 'MM/d/yyyy', 'M/d/yyyy'
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: FileHelpers.ConvertException: Error Converting '"12/22/2011"' to type: 'DateTime'.  does not match any of the given formats: 'MM/dd/yyyy', 'MM/d/yyyy', 'M/d/yyyy'
4

2 回答 2

4

1) [编辑] - 我错了,您可以将 engine.ErrorManager.ErrorMode 设置为 SaveAndContinue - 请参阅示例@http: //www.filehelpers.com/example_errorhandling.html

2)基于包含双引号字符串的单引号,我会说问题是您需要提供 FieldQuoted 属性 - 请参阅http://www.filehelpers.com/attributes.html

于 2012-01-15T03:40:48.600 回答
3

您可以使用该BeforeReadRecord事件来解析记录行并设置skipThisRecord = True您需要跳过的任何记录。例如:

FileHelperEngine engine = new FileHelperEngine(typeof(Orders)); 
// set the event here
engine.BeforeReadRecord += new BeforeReadRecordHandler(BeforeEvent); 

然后是事件本身:

private void BeforeEvent(EngineBase engine, BeforeReadRecordEventArgs e)
{
    // skip any bad lines
    if (e.RecordLine.StartsWith(" ") || e.RecordLine.StartsWith("-"))
        e.SkipThisRecord = true;
}

在上面的示例中,任何以空格或“-”开头的记录都将被跳过,但您可以应用您需要的任何逻辑。您可以使用e.RecordLine.Split(',')将当前行拆分为列值数组,然后用于DateTime.TryParse()确定日期字符串是否有效。

于 2012-01-16T10:37:42.283 回答