2

取得した CSV を処理できないようです。これは銀行によって生成されたファイルで、次のようになります。

"000,""PLN"",""XYZ"",""2011-08-31"",""2011-08-31"",""0,00"""
1,""E"",""2011-08-30"",""2011-08-31"",""2011-08-31"",""399,00"",""0000103817846977"",""UZNANIE OTRZYMANE ELIXIR"",""23103015080000000550217023"",""XXX"",""POLISA UBEZPIECZENIA NR XXX  "",""000""
3,""E"",""2011-08-31"",""2011-08-31"",""2011-08-31"",""1433,00"",""0000154450232753"",""UZNANIE OTRZYMANE ELIXIR"",""000"",""XXX"",""POLISA UBEZPIECZENIA XXX  "",""000""

(すべての機密情報を変更しました)。

朝から解析しようとしましたが、大したことはありません。私はネット上のどこかで見つかったLINQ to CSVの例、CodeProjectの例を使用しました(どちらもCSVが破損しているというエラーをスローしました)。

  1. 399,00" " と同様の値を 2 つのフィールドに分割します。
  2. [(FieldQuoted()] 属性を使用すると、すべてのフィールドが DOUBLE 引用符で囲まれているため、すべてがうまくいきません。これが、他のパーサーが機能しない理由だと思います。

それを処理する方法はありますか?

4

2 に答える 2

3

問題が二重引用符であると思われる場合は、二重二重引用符を単一二重引用符で置き換えることにより、各行を前処理できます。

line = line.Replace( "\"\"", "\"" );

ファイル全体が処理されたら、他の CSV プロセッサで処理することができます。とにかく、自分で書く方がおそらく簡単でしょう。

于 2011-09-06T12:42:12.053 に答える
2

私はLumen、CommonLibrary、FileHelpersなどを使用してきましたが、最終的にTextFieldParserクラスになりました(Visual Basic名前空間からですが、C#で問題なく使用できます)。試してみることをお勧めします。唯一の欠点は、比較的遅いことです。しかし、それはエッジケースに非常にうまく対処しているようです.

明らかに無効な CSV ファイル (""" など。OpenOffice Calc はそれらを適切に処理できませんでした) で動作するようにするためのトリックを発明しました。そのような行に遭遇しMalformedLineExceptionて .変更のために、プロパティが に設定されたcatchブロック。HasFieldsEnclosedInQuotesfalse

すべての値を二重アポストロフィで残すだけで、行が適切に分割されます。私がしなければならなかったのは、これらの二重引用符を「手動で」削除することだけでした。

于 2011-09-06T12:37:38.440 に答える