質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

4103閲覧

LinkedHashMapの使い方について教えてください。

lena

総合スコア31

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2016/03/08 06:12

JAVA初心者です。
ご回答いただいたみなさまのおかげで下記のような担当者別月額売上表を
作成することができました。ありがとうございました。
今回はLinkedHashMapに格納したデータを抽出しコード比較する方法を
教えてください、よろしくお願いします。

【完成例】
担当者,売上日,商品名,数量,売上金額,備考
山田,20160227,チョコレート,3,300
山田,20160228,マシュマロ,1,200
山田,20160229,クッキー,1,300
山田,20160230,せんべい,2,400,日付に誤り有
201602月合計,,,,,1200

package test4; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.text.DateFormat; import java.util.HashMap; public class StaffMonthlySalesRecord { public static void main(String[] args) { BufferedReader brInputFileA= null ; //商品マスタ用 BufferedReader brInputFileM= null ; //売上明細用 BufferedWriter bwOutputFileA = null ; //月額売上表用 String stBufferM = ""; //inMファイルデータを格納 String stBufferA = ""; //inAファイルデータを格納 Map<String,Object> alDataM = new LinkedHashMap<String,Object>() ; //商品マスタの入力データを格納 LinkedHashMap<String, Object> mpDataM = null; String date = ""; //売上明細ファイルの購入月をセット String staff = ""; //売上明細ファイルの担当者をセット boolean isFirst = true; //0番目の売上日をセットする為の変数 boolean isFirstStaff = true; //0番目の担当者をセットする為の変数 int sum = 0; //合計金額 int allSum = 0; //月の合計金額 int cnt10 = 0; //10件を数えるカウンター final String noItem = "商品マスタ未存在"; final String nocalendar = "日付に誤りがあります"; try{ fileError:{ try{ brInputFileM = new BufferedReader(new InputStreamReader(new FileInputStream("C:/Users/temp/Desktop/inM.csv"),"JISAutoDetect")); }catch(FileNotFoundException e){ System.err.println("inMファイルが見つかりません。"); break fileError; } //inMファイルデータを読み込み while((stBufferM = brInputFileM.readLine()) != null){ if(stBufferM.equals("")){ System.err.println("データに不備があります。"); break fileError; } String[] itemM = stBufferM.split(","); mpDataM = new LinkedHashMap<String,Object>(); //商品マスタ用データを分割し格納 mpDataM.put("code",itemM[0]); mpDataM.put("name",itemM[1]); mpDataM.put("price",itemM[2]); alDataM.put(itemM[0],mpDataM); }//while try{ brInputFileA = new BufferedReader(new InputStreamReader(new FileInputStream("C:/Users/temp/Desktop/inA.csv"),"JISAutoDetect")); }catch(FileNotFoundException e){ System.err.println("inA.csvファイルが見つかりません。"); break fileError; } try{ bwOutputFileA = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:/Users/temp/Desktop/outA.csv"),"SJIS")); }catch(FileNotFoundException e){ System.err.println("outA.csvファイルが見つかりません。"); break fileError; } try{ bwOutputFileA.write("担当者" + "," + "売上日" + "," + "商品名" + "," + "数量" + " ," + "売上金額" + "," + "備考"); //項目名出力 bwOutputFileA.newLine(); while((stBufferA = brInputFileA.readLine()) != null){ if(stBufferA.equals("")){ System.err.println("データに不備があります。"); break fileError; } if(stBufferA.isEmpty()){ System.err.println("inA.csvファイルは空です。"); break fileError; } String[] itemA = stBufferA.split(","); mpDataM = alDataM.get(itemA[2]); if(stBufferA.equals("")){ System.err.println("データに不備があります。"); break fileError; } if(isFirstStaff){ staff = itemA[0]; isFirstStaff = false; } if(!alDataM.containsKey(itemA[0])){ staff = itemA[0]; isFirstStaff = false; } if(isFirst){ date = itemA[1].substring(0, 6); isFirst = false; } String boughtDay = (itemA[1].substring(0, 6)); int t = boughtDay.compareTo(date); //月変更の比較 if(t > 0){ bwOutputFileA.write("*"); bwOutputFileA.newLine(); bwOutputFileA.write(date.substring(0, 6) + "月合計" + "," + "," + "," + "," + allSum); //合計金額を出力 bwOutputFileA.newLine(); String a = " "; bwOutputFileA.write(a); bwOutputFileA.newLine(); date = itemA[0]; allSum = 0; // 月の合計を0に戻す } cnt10 = cnt10 + 1; //件数カウンターに1を加算 if(cnt10 >= 10){ //件数カウンターが10件に到達した場合 String a = " "; bwOutputFileA.write(a); bwOutputFileA.newLine(); cnt10 = 0; // 件数カウンターリセット } for (String key : alDataM.keySet()) { LinkedHashMap<String, Object> a = alDataM.get(key); if(key.equals(itemA[0])){ String a = itemA[0]; //担当者 String b = itemA[1]; //売上日 Object c = mpDataM.get("name"); //商品名 String d = itemA[3]; //数量 String e = ""; //備考 if(checkDate(itemA[1])){ //日付の妥当性を確認 int num = Integer.parseInt(itemA[2]); int num2 = Integer.parseInt((String) d); sum = num * num2; //数量×単価=金額 allSum = sum + allSum; //月合計を算出 bwOutputFileA.write(a + "," + b + "," + c + "," + d + "," + sum + "," + e); bwOutputFileA.newLine(); }else{ e = nocalendar; //備考=日付に誤りがあります bwOutputFileA.write(a + "," + b + "," + c + "," + d + "," + sum + "," + e); bwOutputFileA.newLine(); } }else{ String a = itemA[0]; //担当者 String b = itemA[1]; //売上日 String c = noItem; //商品名=商品マスタ未存在 String d = itemA[2]; //数量 bwOutputFileA.write(a + "," + b + "," + c + "," + d); bwOutputFileA.newLine(); } }//while bwOutputFileA.write("*"); bwOutputFileA.newLine(); //bwOutputFileA.write(date.substring(0, 6) + "月合計" + "," + "," + "," + "," + allSum); //合計金額を出力 }//try catch(IOException e){ System.err.println("エラーが発生しました。"); e.printStackTrace(); } }//fileError } //try catch(IOException e){ System.err.println("エラーが発生しました。"); e.printStackTrace(); } finally{ try { if(brInputFileA != null){ brInputFileA.close(); } if(brInputFileM != null){ brInputFileM.close(); } if(bwOutputFileA != null){ bwOutputFileA.close(); } } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } } /** * 日付の妥当性をチェック * カレンダーに存在するかどうかを返す。 * 存在する日付の場合true */ public static boolean checkDate(String strDate) { if (strDate == null || strDate.length() != 8) { throw new IllegalArgumentException( "引数の文字列["+ strDate +"]" + "は不正です。"); } DateFormat format = new SimpleDateFormat("yyyyMMdd"); format.setLenient(false); try { format.parse(strDate); return true; } catch (Exception e) { return false; } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

LinkedHashMapに登録したデータの取り出し方が分からないと読み取りました。
以下の形でデータを取って比較対象と比較してはどうでしょうか?

Map<String, String> map = new LinkedHashMap<String, String>(); map.put("001", "AAA"); map.put("009", "BBB"); map.put("005", "CCC"); for(Map.Entry<String, String> e : map.entrySet()) { // Mapのkey String key = e.getKey(); // Mapのvalue String value = e.getValue(); }

投稿2016/03/09 01:36

msd

総合スコア95

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問