私はクラスCsvReader
をうまく使用していて満足していますが、私が使用するファイルは、知らないうちに列の形式を変更するグループによって作成されています。
つまり、すべてが正常に機能していると、翌朝の問題が発生し、csv.GetRecord<MyType>()
のtry catchブロックがエラーをキャッチしてログに記録しますが、Exceptionインスタンスから重要な情報を収集できません。 「変換は実行できません」とだけ書かれています。 InnerException
には何もありません。あまり役に立たない。 150列のうちどれが問題の原因であるのかさえわかりません。
どの行のどの列が問題を引き起こしているのかを特定する方法を理解するのを手伝ってくれませんか?
ありがとう
まず、CsvTypeConverterExceptionをキャッチする必要があるようです。
while (csv.Read())
{
try
{
var record = csv.GetRecord<MyType>();
}
catch (CsvTypeConverterException ex)
{
//ex.Data.Values has more info...
}
}
問題の原因を調査する方法はわかりましたが、そのフィールドがスキップされ、その行の残りのフィールドが変換されて、行全体が破棄されないようにするにはどうすればよいですか?
ありがとう
現在、フィールド/プロパティレベルのエラーを無視する方法はありません。現在のオプションは次のとおりです。
例外データを見てください。
catch( Exception ex )
{
// This contains useful information about the error.
ex.Data["CsvHelper"];
}
例外の読み取りを無視します。ただし、これはフィールドではなく行レベルです。これにより、ファイル全体を引き続き読み取ることができ、機能しない行は無視されます。例外が発生したときにコールバックを取得できます。
csv.Configuration.IgnoreReadingExceptions = true;
csv.Configuration.ReadingExceptionCallback = ( ex, row ) =>
{
// Do something with the exception and row data.
// You can look at the exception data here too.
};