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

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

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

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

Java

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

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

Q&A

0回答

1507閲覧

CVS 形式のファイルを読み込み、計算処理を行った結果を別のファイルに書き出すプログラムを作成したいです。(java)

退会済みユーザー

退会済みユーザー

総合スコア0

CSV

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

Java

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

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

0グッド

0クリップ

投稿2020/04/22 02:00

お世話になります。
CSV 形式のファイルを読み込み、次の計算を行った結果を別のファイルに書き出すjavaのプログラムを作成しています。

読み込むファイルのデータ
test.csv

受験者名,計算方法,数学の点数,国語の点数,英語の点数,物理の点数,生物の点数 例 山田太郎,A,85,73,90,68,75 田中花子,H,95,75,88,90,79 佐藤次郎,B,88,90,38,,50, 斎藤三郎,M,55,84,,95,85

次の計算をして別のファイルに書き出します。

A :平均点: 5つの点数の平均を求める。
B :最高点: 1番高い点数を求める。
H :中間点1 1番高い点数と 1番低い点数の平均を求める。
M :中間点2: 点数を降順に並べたときの中心の点数を求める。
(M:中間点2について、点数が偶数個の場合では値が大きい方を出力する。)

書き出したファイル
Result.txt

受験者名,計算結果,計算方法 例 山田太郎,78.2,平均点 田中花子,85,中間点1 佐藤次郎,90,最高 斎藤三郎,84,中間点2

・受験者は最低3科目以上の点数を持っている。点数はところどころ抜けていることもある。

・行ごとの列数が不正である場合、出力時、その行には計算結果ではなく、不正なデータであることをファイルに出力する。
→名前の未入力、計算方法の不正、列数の不正、点数に数字以外の文字が記述されている不正等は以下の通り出力する。
--- 名前の未入力:「名前を入力してください。」
--- 不正な計算方法指定: 「計算方法は[A,B,H,M]のいずれかを入力してください。」
--- 列数の不足:「列数が不足しています。受験者名、計算方法は必ず入力し、未受験の科目がある場合は空欄。」
--- 列数オーバー: 「列数が多すぎます。 受験者名、計算方法、5科目の点数、計7項目まで入力できます。」
--- 不正な点数:「それぞれの点数は空欄、または0~100までの整数を入力してください。」

・読み込みファイルが見つからない、コマンド入力ミス等で正しくファイルが読み込めない場合、例外処理をおこない、処理を終了させること。また、エラー内容がわかるように標準出力させること。

・指定したファイルが見つからない場合:「指定されたファイルが見つかりません。」

・取得するファイルが指定されていない場合: 「ファイルを指定してください。」

・このファイルへ出力順は、読み込みファイルの順番と同じとする。

・ファイル出力の場所は、入力ファイルと同じ場所とする。

現在、以下の通りにコードを組みましたが、次からどのようにすればわかりません。

java

1import java.io.BufferedReader; 2import java.io.BufferedWriter; 3import java.io.File; 4import java.io.FileNotFoundException; 5import java.io.FileReader; 6import java.io.FileWriter; 7import java.io.IOException; 8 9 public class Main { 10 public static void main(String[] args) { 11 String line; 12 String[] csvArray = null; 13 File inputFile = new File("C:\syoutest.cvs"); 14 File outputFile = new File("C:\Result.txt"); 15 BufferedReader in = null; 16 BufferedWriter out = null; 17 18 try { 19 in = new BufferedReader(new FileReader(inputFile)); 20 out = new BufferedWriter(new FileWriter(outputFile)); 21 csvArray = line.split("\,"); 22 csvArray = line.split("\,"); 23 24 25 26 27 28 // データを出力する 29 for (int i = 0; i < csvArray.length; i++) { 30 // 行の最後のデータはカンマ付けない 31 if (i != csvArray.length - 1) { 32 out.write(csvArray[i]); 33 out.write(","); 34 } else { 35 out.write(csvArray[i]); 36 } 37 } 38 // 改行する 39 out.newLine(); 40 } 41 } catch (FileNotFoundException e) { 42 e.printStackTrace(); 43 } catch (IOException e) { 44 e.printStackTrace(); 45 } finally { 46 try { 47 if (in != null) { 48 in.close(); 49 } 50 if (out != null) { 51 out.close(); 52 } 53 } catch (IOException e) { 54 e.printStackTrace(); 55 } 56 } 57 } 58}

各計算処理を行うメソッドを持ったクラスを作る。→その結果をを変数に収納

java

1public class Person { 2 public static double main(int[]) { 3 double sum = 0; 4 double[] data = {}; 5 for( int i=0; i < data.length; i++ ) { 6 sum += data[i]; 7 } 8 double ave = sum / data.length; 9 } 10 11 public static void max_data(int[] data){ 12 int max=data[0]; 13 for(int i = 1;i < 5;i++){ 14 if(max<data[i]){ 15 max = data[i]; 16 } 17 } 18 } 19 static void min_data(int[] data){ 20 21 int min = data[0]; 22 for(int i = 1;i < 5;i++){ 23 if(min > data[i]){ 24 min=data[i]; 25 } 26 } 27 } 28}

上記のように平均値と最大値、最小値を求めるクラスのコードを書いていけばよいのでしょうか。
プログラムを初めて2週間で何から手を付ければよいのかもわからない状態です。
ヒントなどだけでもいただければ幸いです

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

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

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

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

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

hoshi-takanori

2020/04/22 11:36

プログラムを初めて2週間でこれは難しめの課題ですね。とりあえず 1 行ずつ処理すれば良さそうなので、 ・1 行読み込んで変数 line に格納、null (ファイル終了) ならおしまい ・line を分割してそれぞれの値を取り出す ・Person クラスを使うなら、取り出した値を使って Person オブジェクトを生成する ・計算方法に応じて計算を行う ・結果を出力 という感じになると思います。
退会済みユーザー

退会済みユーザー

2020/04/23 00:30

手順だけでも助かります! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問