成績処理アプリの作成(CSV読み込み、データ格納用クラス)
統計クラスを作ってみる③
前回まで、統計計算クラスを作成してきました。一通りの機能を実装する事ができたので、デスクトップアプリ化に向けて今回は「CSVファイルの読み込み」機能の実装と、前回までで作成した統計計算クラスを利用するところをやりたいと思います。
今回はまだコンソールでの操作となります。
csvファイルの読み込み
まずは、CSVファイルの読み込み機能から実装したいと思います。
そもそもCSVファイルとは、データを「,(カンマ)」で区切り、複数行に渡ってデータを保存しているファイルとなります。
例えば、「学籍番号,生徒名,国語の得点,数学の得点,・・・」といった形でデータを保存しています。事前に左から順に項目を決めておく必要があります。
データは一行ずつデータがなくなるまで読み込みます。その後、読み込んだデータを一行ずつカンマで文字列を分割します。保存形式はListを採用します。
これらをコードで書くと以下のようになります。
public class CSVAccess
{
public static List LoadCSV( String path )
{
List list = new List();
StreamReader sr = new StreamReader( @path );
{
while( !sr.EndOfStream )
{
string line = sr.ReadLine();
string[] lines = line.Split( ',' );
list.Add( lines );
}
}
return list;
}
}
読み込んだ行をSplitメソッドで分割し、stringの配列にして、Listに追加します。すべてのデータを読み込んだら、Listを戻り値として処理を終了します。
データ格納クラス
今回読み込んだデータを格納しておくクラスを作成しておきます。
今回作成するアプリは、成績処理にしようと考えているので、「学籍番号」や「生徒名」、「各科目の点数」を格納するクラスStudentクラスを実装します。
Studentクラスには、読み込んだ項目の変数を作成しておき、それぞれのセッターとゲッターの作成を行っておきます。
また、引数にすべてのフィールド値をとるコンストラクタを用意しておき、インスタンス時にすべての変数に値を代入しておきます。
コードは以下のようになります。
public class Student
{
public string Id { set; get; }
public string Name { set; get; }
public int Japanese { set; get; }
public int Math { set; get; }
public int English { set; get; }
public int Science { set; get; }
public int Society { set; get; }
public Student( string _id, string _name, int _japanese, int _math, int _english, int _science, int _society )
{
Id = _id;
Name = _name;
Japanese = _japanese;
Math = _math;
English = _english;
Science = _science;
Society = _society;
}
}
以降、CSVファイルを読み込んだデータはこのクラスのオブジェクトに格納しておきます。
自作メソッド用にデータの型を変換する
前回作成した自作のメソッドは基本的に配列を引数としていましたが、CSVの読み込み後はStudentクラスオブジェクトに格納し、Listに追加していくので、Listを配列に変換する必要があります。
なので、変換して値を受け取れるメソッドを追加で作成します。
今回は2種類のメソッドを作成します。1つはListを配列に変換するメインのメソッド、2つ目は引数に応じた科目をStudentクラスから取り出すメソッドです。正直2つ目はなくてもいいのですが、コードのみやすさの関係で作成しました。
コードは以下のようになります。
private static int[] MakeDataArray( List<Student> list, int n )
{
int[] dataArray = new int[list.Count];
int i = 0;
foreach( Student student in list )
{
dataArray[i] = SubjectValue( student, n );
i++;
}
return dataArray;
}
private static int SubjectValue( Student student, int n )
{
int m = 0;
if (n == 1)
{
m = student.Japanese;
}
else if (n == 2)
{
m = student.Math;
}
else if (n == 3)
{
m = student.English;
}
else if (n == 4)
{
m = student.Science;
}
else if (n == 5)
{
m = student.Society;
}
return m;
}
これでListを配列に変換する事ができるので自作したメソッドを書き換えることなく使うことができます。
まとめ
以上の新しく作成さたクラスと前回までに作成した自作の統計計算クラスを使い成績処理ができるコンソールアプリケーションの作成までできました!
↓こんな感じです。
スマホアプリは作成してきましたがデスクトップアプリは初めてなので画面レイアウトから学ぶ必要があります。あとはグラフの表示と保存などの機能も、、、
先は長そうですが、一つ一つ調べながら作成を進めていきたいと思います。
今回はこの辺で、ではまた!
