
プログラミング初心者の者です。
以下の様なデータの入ったcsvファイルを、javaで処理しなければならなくなりました。
#1 #2 #3
B 00 00 00
A 00 00 00
C 00 00 00
B 00 00 00
A 00 00 00
D 00 00 00
C 00 00 00
A,B,C,Dそれぞれのデータを、#1,#2,#3それぞれのテーマで集計
したいのですが、どういったプログラムを書けばいいのかよくわかりません。
csvファイルを読み込んで、吐き出す事だけはできているので、
間にどんなプログラムを書けば良いのか、ヒントを頂ければ幸いです。
宜しくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
Java 勉強中です。
入力 dat:
Header
B,3,1,8,3,0
A,5,5,1,1,1
C,1,3,5,4,4
B,8,7,7,5,2
D,1,8,8,1,8
C,0,2,2,1,2
出力:
A,5,5,1,1,1
B,11,8,15,8,2
C,1,5,7,5,6
D,1,8,8,1,8
コマンドラインで
java Main < dat
とやっています。
Main.java:
import java.util.*;
public class Main {
private static Scanner in;
private enum Alphabetic {
A
, B
, C
, D
}
public static void main(String[] args) {
EnumMap<Alphabetic, ArrayList<Integer>> total =
new EnumMap<Alphabetic, ArrayList<Integer>>(Alphabetic.class);
for (Alphabetic a: Alphabetic.values()) {
total.put(a, new ArrayList<Integer>());
}
in = new Scanner(System.in);
in.nextLine(); // ignore header
while (in.hasNextLine()) {
Scanner field = new Scanner(in.nextLine()).useDelimiter("\\s*,\\s*");
String candidate = field.next();
Alphabetic series = null;
for (Alphabetic a: Alphabetic.values()) {
if (candidate.equals(a.name().toString())) series = a;
}
if (total.get(series).isEmpty()) {
while (field.hasNext()){
total.get(series).add(new Integer(field.next()));
}
}
else {
for (int i = 0; i < total.get(series).size(); i++) {
int addee = total.get(series).get(i);
total.get(series).set(i, addee + new Integer(field.next()));
}
}
}
for (Alphabetic series: Alphabetic.values()) {
StringBuilder sb = new StringBuilder();
sb.append(series.name());
for (int e: total.get(series)) {
sb.append(","); sb.append(e);
}
System.out.println(sb);
}
}
}
No.1
- 回答日時:
・#1 集計用の Map(key=A or B or C, value=集計値) 変数を用意
・#2 集計用の Map(key=A or B or C, value=集計値) 変数を用意
・#3 集計用の Map(key=A or B or C, value=集計値) 変数を用意
while (csv の行数分ループ) {
・key = 1列目の文字を取得(Map の key となる)
・map に集計値をセット
#1Map.put(key, #1Map.get(key) + csv 2 列目の値)
#2Map.put(key, #2Map.get(key) + csv 3 列目の値)
#3Map.put(key, #3Map.get(key) + csv 4 列目の値)
}
なんか汚いですね、、、
map から get したときの null チェックも必要ですね。
列やA/B/Cが可変なら、もっと別の方法が良さそうです。
参考程度に見てください。
Map は key に対する value を管理するクラスです。
get(key) でその key に対する value を取得し、
put(key, value) でその key に対する value をセットします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現について質問です。 カ...
-
プログラミングの問題です。大...
-
Googleログインボタンのデザイ...
-
googleスプレッドシートのGASに...
-
直し方について教えて頂きたい...
-
「main メソッドを持つクラスが...
-
プログラムの単体テストで金額...
-
JDONWROADER2のエラー修復
-
スプレッドシートからリマイン...
-
googleスプレッドシートのスク...
-
Verilogについて質問です。この...
-
論理回路設計をVerilogで行う問...
-
ゲーム開発の入門書を探しています
-
jdbcでinsert,delete,createをe...
-
session,requestはjspで未定義...
-
サーブレットをapacheで公開す...
-
下記のリストならno002が含まれ...
-
is this even a thing?
-
JAの支部?地域の農協のカード...
-
えハミルトン路と全域木のちが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
splitを使ってスペース位置で文...
-
Java、配列の問題を教えて欲し...
-
VBA SubTotalで集計を出そうと...
-
VBAで連番に色を付けたい
-
上書き保存されない
-
エクセルでマクロを続けて実行...
-
VBAについて質問。別シートに転...
-
VBAでIEを最小化したい
-
GAE/Jによる入力値チェック
-
JavaScriptでキャッシュクリア...
-
業務が劇的に便利になったツー...
-
VBAを教えていただきたいです。...
-
Excel AutoFilterメソッドについて
-
マクロのエラー
-
javaでcsvファイル処理
-
入出力について
-
郵便番号から都道府県・郡・市...
-
Caps Lockキーの解除
-
VBA 条件が一致した場合の...
-
Excel2010の並べ替えで行の高さ...
おすすめ情報