c#でcsvファイルを配列に格納して返すクラスを作ってみた
音ゲーのタイミングデータをCSVで取り扱いたかったので、下記のクラスを作って見ました。
StreamReaderの、closeとかdisposeとかがまだあまり理解してないので、後で修正したいと思います。
配列について、タイミングデータの数が曲や難易度によって変化することを見込んで、List<>を使用しました。
//////////////////////////////////////////////// //ファイルからノート配列を作成する役割 using System.Collections.Generic; using System.IO; public class InputCSV { //////////////////////////////////////// //データ構造 private List<Note> noteArray; private int index; private StreamReader csv; //////////////////////////////////////// //処理 //コンストラクタ public InputCSV(string fileName) { this.noteArray = new List<Note>(); index = 0; InputNote(fileName); } //インデックスの最大値を返す。 public int getIndex{get{return index;}} //CSVデータを入れたノート配列を返す。 public Note[] Output() { return noteArray.ToArray(); } //ファイルを読み込んで、配列に格納する関数 private void InputNote(string filename) { //ファイルを読み込み、配列にstringを格納していく。 csv = new StreamReader("Assets/Resources/" + filename); ReadAllLineCSV(); } //CSVファイルを1行ずつ読み込み、配列に足していく関数 public void ReadAllLineCSV() { //indexMaxの値が実際と違わないように、この関数内で初期化する。 index = 0; //操作用データ string line = ""; string[] lineArray; //順次格納 while (csv.Peek()>=0) { //ファイルから1行読み込み、配列に格納する。 line = csv.ReadLine(); lineArray = line.Split(','); noteArray.Add(new Note(float.Parse(lineArray[0]),int.Parse(lineArray[1]))); //行数の追加 index++; } csv.Close(); } }