java初心者です。
入力ファイルをもとに計算Cと判定マスタMを使用して入力ファイルの値をoutA.csv、outB.csvに
出力したいのですが、想定とおりに実装できません。
【問題点】
①出力結果が2回づつ表示されています。
②inM.csvファイルが空の場合エラー表示して通常終了したい
のですが次の処理に進んでしまいます。
以上2点の解決方法をお教えいただけないでしょうか。
【仕様内容】
入力ファイルの数値をキーとして計算Cを読込みます。
読込んだ計算Cの値で入力ファイルの数値を除算します。
除算した結果が偶数の場合、判定Mの「002」を読込みます。
判定Mの値が「○」の場合、outAに入力ファイルの値を出力し、
「×」の場合は、outBに入力ファイルの値を出力します。
除算した結果が奇数の場合、判定Mの「001」を読込みます。
判定Mの値が「○」の場合、outAに入力ファイルの値を出力し、
「×」の場合は、outBに入力ファイルの値を出力します。
入力file 計算C 判定M キー 値 10 キー 値 奇数 001,× 9 1,2 偶数 002,○ 8 2,3 7 3,1 6 4,2 5 5,3 4 6,1 3 7,2 2 8,3 1 9,1 10,2 【実現したい出力例】 outA.csv outB.csv 6 10 4 9 8 7 5 3 2 1
package test5; 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.io.UnsupportedEncodingException; import java.util.ArrayList; public class JudgementValue { public static void main(String[] args) { BufferedReader brA = null; //inA Inputファイル入力用 BufferedReader brC = null; //inC 計算ファイル入力用 BufferedReader brM = null; //inM 判定マスタファイル入力用 BufferedWriter bwA = null ; //outAファイル出力用 BufferedWriter bwB = null ; //outBファイル出力用 String stA = ""; //inAファイルデータを格納 String stC = ""; //inCファイルデータを格納 String stM = ""; //inMファイルデータを格納 ArrayList<String[]> alMaster = new ArrayList<String[]>(); //判定マスタ ArrayList<String[]> alCalc = new ArrayList<String[]>(); //計算C String[][] masterM = null ; //判定マスタ用 String[][] numC = null ; //計算C用 double quotient = 0; //除算の商い結果 boolean emptyflgM = true; //inM判定マスタファイル空判定フラグ boolean emptyflgC = true; //inC計算Cファイル空判定フラグ boolean emptyflgA= true; //inA入力ファイル空判定フラグ try{ brC = new BufferedReader(new InputStreamReader(new FileInputStream("C:/Users/temp/Desktop/inC.csv"),"JISAutoDetect")); }catch(FileNotFoundException e){ System.err.println("inC.csvファイルが見つかりません。"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } try{ brM = new BufferedReader(new InputStreamReader(new FileInputStream("C:/Users/temp/Desktop/inM.csv"),"JISAutoDetect")); }catch(FileNotFoundException e){ System.err.println("inM.csvファイルが見つかりません。"); }catch (UnsupportedEncodingException e) { e.printStackTrace(); } fileError1: //inMファイルデータを読み込み try { while((stM = brM.readLine()) != null){ emptyflgM = false; if(stM.equals("")){ System.err.println("データに不備があります。"); break fileError1; } alMaster.add(stM.split(",")); /* ArrayListへ読み込み */ } if(emptyflgM){ System.err.println("inM.csvファイルは空です。"); break fileError1; } masterM = new String[alMaster.size()][]; for (int i = 0; i < alMaster.size(); i++) { masterM[i] = alMaster.get(i); /* ArrayListから配列へ格納 */ } //inCファイルデータを読み込み while((stC = brC.readLine()) != null){ emptyflgC = false; if(stC.equals("")){ System.err.println("データに不備があります。"); break fileError1; } alCalc.add(stC.split(",")); /* ArrayListへ読み込み */ } if(emptyflgC){ System.err.println("inC.csvファイルは空です。"); break fileError1; } numC = new String[alCalc.size()][]; for (int i = 0; i < alCalc.size(); i++) { numC[i] = alCalc.get(i); /* ArrayListから配列へ格納 */ if (!isHanNum(numC[i][0]) || !isHanNum(numC[i][1])) { System.err.println("数値以外のものが含まれています。"); break fileError1; } } } catch(IOException e){ System.err.println("エラーが発生しました。"); e.printStackTrace(); }finally{ try { if(brM != null){ brM.close(); } if(brC != null){ brC.close(); } }catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } }//finally try{ brA = new BufferedReader(new InputStreamReader(new FileInputStream("C:/Users/temp/Desktop/inA.csv"),"JISAutoDetect")); }catch(FileNotFoundException e){ System.err.println("inA.csvファイルが見つかりません。"); }catch (UnsupportedEncodingException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } try{ bwA = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:/Users/temp/Desktop/outA.csv"),"SJIS")); }catch(FileNotFoundException e){ System.err.println("outA.csvファイルが見つかりません。"); }catch (UnsupportedEncodingException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } try{ bwB = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:/Users/temp/Desktop/outB.csv"),"SJIS")); }catch(FileNotFoundException e){ System.err.println("outB.csvファイルが見つかりません。"); }catch (UnsupportedEncodingException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } fileError2: try{ //inAファイルデータを読み込み while((stA = brA.readLine()) != null){ emptyflgA = false; if(stA.equals("")){ System.err.println("データに不備があります。"); break fileError2; } if(isHanNum(stA) == false){ System.err.println("数値以外のものが含まれています。"); break fileError2; } for (int i = 0; i < numC.length; i++) { if(stA.equals(numC[i][0])){ //入力の値と計算Cのキーの値の一致確認 quotient= Double.valueOf(stA) / Double.valueOf(numC[i][1]); if(quotient % 2 == 0){ //偶数かどうかを確認 if(masterM[1][1].equals("○")){ bwA.write(stA); bwA.newLine(); System.out.println("1番目:" + stA); }else{ bwB.write(stA); bwB.newLine(); System.out.println("2番目:" + stA); } }else{ if(masterM[0][1].equals("○")){ bwA.write(stA); bwA.newLine(); System.out.println("3番目:" + stA); }else{ bwB.write(stA); bwB.newLine(); System.out.println("4番目:" + stA); } } } } //for quotient = 0; //除算の商い結果を0にリセット } //while if(emptyflgA){ System.err.println("inA.csvファイルは空です。"); break fileError2; } }catch(IOException e){ System.err.println("エラーが発生しました。"); e.printStackTrace(); }finally{ try { if(brA != null){ brA.close(); } if(bwA != null){ bwA.close(); } if(bwB != null){ bwB.close(); } }catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } }//finally }//main /** * 半角数値チェック * @param s 文字列 * @return true 正常 false エラー */ public static boolean isHanNum(String s){ try{ Double.parseDouble(s); return true; }catch(Exception e){ return false; } } }
回答2件
あなたの回答
tips
プレビュー