如何跳过不良记录

本文关键字:记录 不良 何跳过 | 更新日期: 2023-09-27 18:20:14

我正在使用文件帮助程序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'

如何跳过不良记录

1)[EDIT]-我错了,你可以设置引擎。ErrorManager.ErrorMode to SaveAndContinue-请参阅示例@http://www.filehelpers.com/example_errorhandling.html

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

您可以使用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()确定日期字符串是否有效。