developer_RYO’s blog

スマホアプリやPCゲーム、音楽やイラストを自由気ままに作っている人の技術ログです

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();
	}
}