0

Java プログラムから書き込み操作を実行して、次のようなフィールドを持つ csv ファイルを作成しました。

「123」、「本土」、「ハロー、ボーイ」、「戦争と平和が好き」、……

COPY tablea from 'filename.csv' DELIMITER ',' CSV; を使用して、このファイルを postgres (9.1) データベースにアップロードしようとしたとき。というエラーが表示されました: 最後の予期された列の後に余分なデータがあります。

このエラーが発生するのは、4 列目の値内の「 " 」が原因だと思います。

また、ファイルをExcelで開いて再度保存するだけで、プロンプトで「はい」を選択することもわかりました:「filename.csvにはcsvと互換性のない機能が含まれている可能性があります。この形式を保持しますか?」必要なすべての変更を行います.

はいをクリックした後、同じファイル (新しく Excel でフォーマットされたもの) から Java で読み取りを実行すると、列は次のようになります。

123、本土、「こんにちは、男の子」、「私は「戦争と平和」が好きです」

この新しいファイル (保存後) も正常にアップロードされます。小さなファイルでこれを試しました。しかし、元のファイルには 250 万件のレコード (>2.5GB) があり、Excel で開くことができません。エクセルで保存する方法を教えてください。自分のファイルに手動で変更を適用できるようにするためです。

ありがとう

4

1 に答える 1

0

Excel がフィールド内のすべての単一の " を "" (doble ") に変更したことがわかりますか? それが答えだと思います。Excel は「スペース、コンマ、または埋め込みを含まないフィールドの周囲から」も削除しましたが、違いはないと思います。そのため、フィールド境界にないすべての " を "" に置き換えてみて、それが機能するかどうかを確認してください。

どのフィールドにも "," シーケンスが埋め込まれていない場合は、単にすべての " を "" に置き換えてから、すべての "","" を "," に置き換えることができますが、もちろん、"," がある場合は機能しません。フィールド内のシーケンス 問題は、フィールド内に「,」が埋め込まれている場合、それがフィールド区切り文字であるかどうかをどのように知ることができるでしょうか?

于 2013-03-27T07:15:39.083 に答える