問題タブ [supercsv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - javaでcsvファイルの特定のセルの値を変更する方法はありますか?
StackOverflow でこれに関する他の質問をしましたが、そこに記載されているライブラリでは読み取りまたは書き込みしか許可されていません。それらの一部は、SuperCSV のように部分的な読み取りまたは書き込みを許可しますが、特定のセルの値を更新するためにライブラリを使用することはできません。使用できる他のライブラリはありますか、それとも手動で行う必要がありますか?
java - CsvBeanReader を使用して可変数の列を持つ CSV ファイルを読み取る
だから私は.csvファイルの解析に取り組んでいます。StackOverflow のどこかにある別のスレッドのアドバイスを受けて、SuperCSV をダウンロードしました。最終的にほとんどすべてが機能するようになりましたが、修正が難しいと思われるバグに遭遇しました。
この問題は、データの最後の 2 つの列が入力される場合と入力されない場合があるために発生します。以下は、最初の行に最後の列がなく、2 番目の行が完全な .csv ファイルの例です。
2012:07:25,11:48:20,922,"uLog.exe","",キーが押されました,1246,341,-1.00,-1.00,1.00,Shift 2012:07:25,11:48:21,094," uLog.exe","",キーが押されました,1246,341,-1.00,-1.00,1.00,b,Shift
Super CSV Javadocに関する私の理解では、可変数の列がある場合、Java Bean にCsvBeanReaderを設定する方法はありません。Bean の初期化時に、これらの欠落している列を null またはその他のデフォルト値にすることを許可する必要があると思うので、これは本当にばかげているようです。
参考までに、パーサーの完全なコードを次に示します。
Entry クラスのコードは次のとおりです。
そして、私が受け取っている例外 (これは上記の例とは異なる行であり、最後の 2 つの列の両方が欠落していることに注意してください):
はい、ゲッターとセッターをすべて書くのは大変でした。また、申し訳ありませんが、SuperCSV の使用には完全な慣習はありません (変更されていない文字列が必要な場合に使用する CellProcessor など) が、アイデアはわかります。また、このコードは明らかに完全ではありません。今のところ、1 行のデータを正常に取得しようとしています。
この時点で、私の目的のために CsvBeanReader を使用できるかどうか疑問に思っています。そうでない場合は、CsvListReader (ハイパーリンクを投稿しますが、StackOverflow も私を許可していません) は、API をまったく使用せず、Scanner.next を使用するのと同じくらい簡単であるため、少しがっかりしています。 ().
どんな助けでも大歓迎です。前もって感謝します!
java - スーパーcsvを使用してJavaでcsvに書き戻す
私はかなり前からこのコードに取り組んできましたが、行き止まりにルーティングする場合は、単純なヘッドアップを与えたいだけです。現在imが使用しているのは、異なる.csvファイルから同一のセルを計算し、ある行を別のcsvファイルにコピーすることです。問題は、特定の行に書き込むことができるかどうかです。たとえば、2つのセルが行50で一致する場合、行50に書き戻したいと思います。すべてをハッシュマップに抽出すると仮定して、次のように書き込みます。その後、.csvファイルに書き戻しますか?もっと簡単な方法はありますか?
たとえば、1つのCsvに人物の詳細があり、もう1つには実際の人物が住んでいる場所のプロパティの詳細があります。プロパティの詳細を人物のcsvにコピーし、正しい人物の詳細と一致させたいと考えています。これが理にかなっていることを願っています
java - SuperCSV からの読み取り不能な出力?
SuperCSV ライブラリ ( http://supercsv.sourceforge.net/ )を使用して Bean のコレクションから CSV を生成するために呼び出すために、Spring コントローラー用に作成したユーティリティ クラスがあります。
ユーティリティ クラスは非常に基本的なものです。
問題は、この操作からさまざまな動作が得られていることです。その理由はわかりません。これを 1 つのコントローラー (「A」と呼びます) から呼び出すと、予想されるデータの出力が得られます。
他のコントローラー ('B') から呼び出すと、OO Calc で開くことができない認識できないバイナリ データの小さな宣伝文が表示されます。それを Notepad++ で開くと、判読不能な意味不明な行が生成されます。これは、読者がバイナリ ストリームを表示しようとしているとしか思えません。
コントローラー「A」の呼び出し (機能するもの)
...そして、これがコントローラー 'B' の呼び出しです (失敗したもの):
所見:
- 最初に呼び出すコントローラーは関係ありません。「A」は常に機能し、「B」は常に意味不明な結果を生成します
- この関数への両方の呼び出しには、CSVWriter に渡される Bean で定義された操作の合計セットのサブセットであるヘッダー列のリストがあります。
- 単純な例外 printStackTrace は、Bean のリフレクション フィールドが定義と一致しない (つまり、プログラムで値を取得するための get() が見つからない) ことを検出するために機能しており、すべての列/変数の一致が成功していることを示しています。
- デバッガーで、 writer.write(Object, header) 呼び出しが、渡されるオブジェクトの数に基づいて予想される回数ヒットし、これらのオブジェクトに予想されるデータがあることを確認しました。
提案や洞察をいただければ幸いです。問題をより適切に切り分ける方法に本当に困惑しています...
java - superCSV を使用して 80 GB の大きなテキスト ファイルを読み取る
巨大なcsvファイルを読みたい。一般に、ファイルを解析するために superCSV を使用しています。この特定のシナリオでは、ファイルが巨大で、明らかな理由でメモリ不足の問題が常に発生します。
最初のアイデアは、ファイルをチャンクとして読み取ることですが、これが superCSV で機能するかどうかはわかりません。ファイルをチャンクすると、最初のチャンクだけがヘッダー値を持ち、CSV Bean にロードされ、他のチャンクはヘッダー値がなく、例外がスローされる可能性があると感じています。そう
a) 私の思考プロセスが正しいかどうか疑問に思っていました
b) この問題にアプローチする他の方法はありますか?
だから私の主な質問は
superCSV には大きな csv ファイルを処理する機能がありますか。superCSV は BufferedReader を介してドキュメントを読み取ることがわかります。しかし、バッファのサイズがわからないので、必要に応じて変更できますか?
@Gilbert Le Blanc私はあなたの提案に従って小さなチャンクに分割しようとしましたが、巨大なファイルを小さなチャンクに分割するには長い時間がかかります. これが私がそれを行うために書いたコードです。
java - SuperCSV パーサーでの作業中の問題
CSVファイルをDBにインポートするWebアプリケーションモジュールを作成しました。インポート プロセスの後、入力ファイル内のレコードの総数、db にインポートされた正常なレコードの総数、拒否されたレコードの総数などの概要が表示されます。ユーザーは成功とエラーの記録をダウンロードして確認できます。
問題は、一部の重複レコードが成功ファイルとエラー ファイルに追加されることです。たとえば、ユーザーは次のようなメッセージを受け取ります。
レコードの総数: 2099正常
なレコードの数: 1694
スキップされたレコードの数: 405
クリックして成功ファイルをダウンロード: Import_20121012184828_success.csv
クリックしてエラー ファイルをダウンロード: Import_20121012184828_errors.csv
データベースを確認すると、テーブル内のレコード数は正確に '1694' です (正常なレコード数と同じです)。ただし、Import_20121012184828_success.csv ファイルには「1741」レコードがあります。しかし、Eclipseコンソールでは、dbと同じように出力されます。つまり、最後の成功レコードの後に重複はありません。したがって、一度ループを終了し、successCsvMapWriter.close(); を呼び出すと、および errorCsvMapWriter.close(); バッファのどこからレコードが追加されているか。私はこれを理解することはできません。
注:少数の入力の場合、問題はまったくありません。バージョン 1.52 および 2.0.0 ベータ版で試しました。
結果のファイルを作成するコードは次のとおりです。
前もって感謝します。
csv - Super CSVでCSVファイルを部分的に読み込む方法
24列のcsvファイルがあります。これらのうち、3つの列のみを読みたいです。スーパー CSV が非常に強力なライブラリであることはわかりましたが、CSV を部分的に読み取る方法がわかりません。部分的に読んでいるリンクが壊れています。
実際の例で私を助けてください。
hadoop - supercsv を使用した Hadoop
非常に大きなテキスト ファイル (サイズが 5 TB など) のデータを処理する必要があります。処理ロジックは、supercsv を使用してデータを解析し、いくつかのチェックを実行します。明らかにサイズが非常に大きいため、並列計算を利用するために Hadoop を使用することを計画しました。マシンに Hadoop をインストールし、マッパーとリデューサーのクラスを書き始めましたが、行き詰まりました。マップにはキーと値のペアが必要なため、このテキスト ファイルを読み取るには、この特定のシナリオでキーと値がどうあるべきかわかりません。誰かがそれを手伝ってくれますか。
私の思考プロセスは次のようなものです(私が正しいかどうか教えてください) 2) これらの supercsvbean ごとに、チェック ロジックを実行します。
java - 引用文字を使用しない区切りファイルでスーパーCSVを使用するにはどうすればよいですか?
スーパーCSVを使用して、パイプ( "|")で区切られたファイルを解析しています。このファイルは、「テキスト修飾子」、またはスーパーCSVが引用文字と呼ぶものを使用していません。問題は、スーパーCSVに引用文字が必要なことです。これをスキップする方法や、ヌル文字を指定する方法がわかりません。現在、入力ファイルに表示されない可能性のある風変わりなUnicode文字を渡しています。
引用文字を使用せずにスーパーCSVでファイルを解析する方法はありますか?
java - OpenCSV - 順序に関係なく、選択した列を Java Bean にマップする方法は?
次の列を含む CSV ファイルがあります: id
、fname
、telephone
、。lname
address
、およびデータメンバーを持つPerson
クラスがあります。これらの列のみを CSV ファイルからオブジェクトにマップし、列を破棄したいと考えています。これどうやってするの?今後さらに列が追加されると、ソリューションはスケーリングする必要があります。また、列の位置に関係なく機能するはずです。id
fname
lname
Person
telephone
address
理想的なソリューションでは、ユーザーは読み取る列のみを指定し、それは機能するはずです。