• 締切済み

Javaでファイル読み込みをして、集計したいです。

初めて質問いたしますので不備があるかもしれませんがよろしくお願いいたします。では、早速ですが、 Javaで以下のようなカンマ区切りのデータの テキストファイルを読み込み ------------------------------------ 1,0,0,20080101101000,A,Z,11 2,0,0,20080101101000,A,Z,12 3,0,0,20080101102000,B,Z,13 4,0,0,20080101105000,C,Z,17 7,0,0,20080101103000,B,Z,14 8,0,0,20080101104000,Z,Z,14 9,0,0,20080101106000,X,Z,16 ------------------------------------ 4番目、5番目の値で抽出した 下記のような集計結果を得たいです。 20080101101000,A が2件 20080101102000,B が1件 20080101103000,B が1件 ・・・ データが数百万件となるので効率よく、メモリを圧迫しないように 処理したいのですが、良い方法がありますでしょうか? Javaは、ほとんど初心者といって良いほどの知識ですので なにとぞよろしくお願いいたします。

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

データの集計が主目的だったら、Javaでなく、PerlやRubyなどの手軽なスクリプト系にしては。 たとえば、perlで書くとこんな感じ: <a.txt perl -MData::Dumper -F, -ane "$a{$F[3].','.$F[5]}++;END{ print Dumper(\%a)}" 結果は以下: $VAR1 = { '200801010000,N' => '160840', '200801010000,O' => '161383', '200801010000,P' => '161520', 以下略。 400万件のテキストを読みこませたら、1分くらいで処理します(動作クロック2GHzくらいのパソコン、OSはVistaでの結果)。 メモリ使用量も100MB程度なので、1GBくらいメモリを載せていれば十分処理できます。 UNIX系OSを使っているか、あるいはWindowsにcygwinやSubsystem for UNIX Applicationなどをセットアップしているなら以下のコマンドでもOK: <a.txt cut -d , -f 4,6 | sort | uniq -c これだと3分くらい(VistaのSUAで実行)。 MS Accessなどのデータベースに登録してから、クエリで集計するという手もあります。 主目的がJavaプログラミングというのだったら、 ・ファイル入出力 ・文字列演算 ・コレクション操作(Hashtableなど) ――あたりを学べばよいかと。

kazxxx
質問者

お礼

回答ありがとうございました。

kazxxx
質問者

補足

osamuyさん、回答ありがとうございます。 用件がJavaでということなのでJavaで実装を考えております。 ちなみに動作環境のOSはSolarisとなります。 ArrayListやHashMapを使用し、算出すると思うのですが、 データ量が多いため、ArrayListにデータが入らず、 ヒープサイズエラーとなったので、 読み込みながら判断して、集計分だけ抽出(ArrayList保管)みたいな・・・ 都合の良いことが出来ないものかと思案しておりました。 順番どおりデータが並んでいないのがまたやっかいなんです・・・。

関連するQ&A

  • エクセル2003の集計で

    エクセル2003の集計で セルA列にコンマ区切りで数値が入っているのですが これをセルB列でで集計することってできますか? A列の数値の数はバラバラです このような感じです↓ A1 1,2,3 B1 6 A2 2,3 B2 5 A3 9,1,7 B3 17 よろしくお願いします

  • Accessの集計、0件のデータを表示させるには?

    Accessで選択クエリの集計を作りたいのですが…。 例えば、誰が何の質問を受けたか、というような、以下のようなテーブルがあるとします。 【A:データテーブル】 Aさん 数学 Aさん 理科 Bさん 社会 Aさん 理科 Bさん 理科 【B:教科マスター】 1 数学 2 社会 3 理科 AとBはリレーションでむすんで?あります。 で、Aテーブルを元に集計を使って以下のようにしたいのです。 Aさん 理科 2件 Aさん 数学 1件 Aさん 社会 0件 Aさんだけを抽出するのは、「抽出条件」で絞ればいいと思います。 教科のそれぞれの件数を出すには、「集計」で教科ごとにグループ化して教科をカウントすればいいと思うのですが、どうしても0(ゼロ)件のデータが出てきません。(上記の例で言うと、「Aさん 社会 0件」が出ない) 0を表示させるにはどこに何を書いたらいいのでしょうか?

  • エクセルのデータ集計で悩んでます。

    エクセルのデータ集計で悩んでます。 下記のデータがあったとします。 a b c あ A x あ A y あ A z あ B x い A x い B y このとき、a列とb列で重複するデータを排除してデータ件数を カウントしたいと思います。 つまり、この例ですと あA・・・1件 あB・・・1件 いA・・・1件 いB・・・1件 とどこかの空エリアに表示させる方法はありませんでしょうか? どなたかご指導よろしくおねがいします。

  • CSVファイルの読み込み

    お世話になります。 VBAでCSVファイルを読み込んで処理をしたいのですが、 たとえば下記のようなCSVファイルの場合 2つめの項目が金額セットされており、あらかじめ通貨編集(カンマ編集) がされていて 金額を1つの項目として読み込む事が出来ません。 金額は""でくくってあるのですが、 カンマ区切りのデータと""でくくってあるデータを うまく区別して3つの項目をそれぞれ抽出する事は可能でしょうか? -----以下CSVの内容------ 日付,金額,データ 2007/03/09,"1,200",TEST1 2007/03/09,"12,200",TEST2 2007/03/09,"76,00",TEST3 2007/03/09,"4,5600",TEST4 --------------------------- ちなみに現在はこのようにカンマ区切り指定でデータを抽出してるので うまく出来ません。   'FileNameにはオープンするファイル名がセットされています   Open FileName For Input As   'textlineに1行を読み込む   Line Input #ch1, textline   csvline() = Split(textline, ",") VBAがまだ不慣れな為質問やサンプルが分かりずらいと思いますが よろしくお願いします。

  • Javaの質問です

    javaでリストの比較をしたいと思っています。 ファイルAの中身を抽出したものをArrayListで格納しました。そして次にファイルBの中身を抽出しました。 ファイルBで抽出したものとファイルAのリストの中身を検索し一致しているものがあったら ファイルBの中身の数値を追加したいと思っています。 ファイルAの中身 1,田中 2,山田 3,加藤 この中身をListにしたのが↓ ファイルAのList(カンマ区切り) [1][田中] [2][山田] [3][加藤] ファイルBの中身 1 test 100 となっており 一致したらファイルAに追加したい数値とはファイルBでいう100という数字です。 どうやって2つのものを比較をし検索したらいいのでしょうか? Mapというものを見つけたのですがこの例でいったらどのように書けばいいのでしょうか... よろしくおねがいしますっ

  • ファイルの読み込み

    a,b,c,d,e,f g,h,i,j,k,l のような1行に5つのデータがカンマで区切られ並んでいるテキストファイルがあります。(行数は決まっていません) これを読み込みリストビューに表示させたいのですが、うまくいきません。 誰かうまい方法を教えてください。

  • SQL Server 2000 文字列操作

    一つのカラムのデータがカンマ区切りで下記の様になっています。 1111,22222,33,444444,555,66666,7777 このデータの3番目のカンマから4番目のカンマまでの データを抽出したいのですがおわかりになる方教えて頂けませんでしょうか?charindexやsubstringを駆使してとりだそうと思ったのですがうまくいきません。 宜しくお願い致します。

  • データの集計

    テキストデータで a,10個 b,3個 c,4 a,3個 c,2個 ...のデータがありますが、EXCEL,ACCESSを使用して、Aの合計、Bの合計..の合計を簡単に集計したいのですが、A,B,C..の種類も多くあり大変です。どうすればよいでしょうか?

  • テキストファイルについて

    あるデータがカンマ区切りなのか、タブ区切りなのか、スペース区切りなのかはテキストファイルにしてメモ帳で開いて確認するしかないんでしょうか? 宜しくお願いします。

  • VBAでテキストファイルからデータを読み込む方法

    VBAでテキストファイルからデータを読み込む方法を探しています。 コンマ区切りのデータを、エクセルに書き込みたいです。 テキストファイルにはコンマ区切りで6個のデータを書き込んであります。 それを、セルD3からD7に書き込む方法を教えていただきたいです。よろしくお願いします。