2012-01-15 10 views
2

私は File Helpers 2.9.9を使用していますが、私はそれがちょうどクラッシュするのではなく、悪いレコードをスキップするにはどうすればいいですか?悪いレコードをスキップする方法

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

私も、それは私が設定したフォーマットを使用した「2011年12月22日を」変換できない理由を見ることができないDateTime.Iとのトラブルを抱えています。

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' 
+0

その中で使用しているAPIを教えてください。 try/catchで呼び出しをラップできない理由はありますか? – JaredPar

+0

私にはストリーム全体をしようとするように見え、すべてのレコードが通過できない場合は失敗します。 – chobo2

+1

関連するノートでは、私がマルコスをどのように受け入れることができるかを知っていれば、これまでパッチを提出しようとしても何の応答も得られていないので、本当に感謝しています。( –

答えて

4

1)[EDIT] - 私が間違っていた、あなたはSaveAndContinueにengine.ErrorManager.ErrorModeを設定することができます - http://www.filehelpers.com/example_errorhandling.html

@ 2の例を参照)で文字列を含む単一引用符に基づいて二重引用符、私はこの問題は、あなたがFieldQuoted属性を提供する必要があるということだと思います - あなたは、レコードラインを解析し、あなたはスキップする必要があるすべてのレコードのためskipThisRecord = Trueを設定するBeforeReadRecord eventを使用することができますhttp://www.filehelpers.com/attributes.html

+0

あなたはリンクを投稿できますか? –

+0

@James Manning - Yaそのパッチも見たいのですが、どの行が失敗したかを知る方法はありますか? – chobo2

+0

@ M.Babcock - 私は間違っていた、エンジンはすでにそれを持って、参照してくださいhttp://www.filehelpers.com/example_errorhandling.html –

2

を参照。例えば:

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; 
} 

スペースまたはAで始まるすべてのレコード上の例では、「 - 」はスキップされますが、あなたが必要なすべてのロジックを適用することができます。 e.RecordLine.Split(',')を使用すると、現在の行を列の値の配列に分割し、DateTime.TryParse()を使用して日付文字列が有効かどうかを判断できます。

関連する問題