今時 Unity だと .csv とかめっちゃスマートに読み込めるのでコピペして使おう。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
class ReadCSV
{
List<CharaData> mCharaDataList = new List<CharaData>();
public void loadCharaData()
{
Dictionary< string, ECharaID> charaid_table = new Dictionary<string,ECharaID>();
for( ECharaID e = ECharaID.Invalid; e < ECharaID.Max; e++ ) enemy_table.Add( e.ToString(), e );
TextAsset alltext = Resources.Load( "GameData/CharaData" ) as TextAsset;
List<string> alllines = alltext.text.Split('\n').ToList();
alllines.RemoveAt( 0 );
alllines.RemoveAt( 0 );
int current = 0;
foreach( string line in alllines )
{
List<string> elements = line.Split(',').ToList();
if ( elements.Count < 6 ) continue;
CharaData d = new CharaData();
d.Value0 = charaid_table[elements[0]];
d.Value1 = SmartParse( elements[1] );
d.Value2 = SmartParse( elements[2] );
d.Value3 = SmartParse( elements[3] );
d.Value4 = elements[4];
d.Value5 = elements[5];
mCharaDataList.Add( d );
}
}
static public int SmartParse( string str )
{
int result;
if ( int.TryParse( str, out result ) ) return result;
else return 0;
}
};
解説
とりあえずリストのために generic、パースのために lynq を読み込む。
最初の行で Dictionary に登録しているのは Enum (列挙型)の一覧。。これにより、CSV に Enum の文字列をそのまま書き込んでも認識されるようになるので便利。
改行でパースしたものを二行飛ばし(コメントなど用のスペース。無くても可)、更に各行を','でパースする。更に各項目の中に複数の値を入れたいなら「|」や「@」などで区切るとよし。
string 型から int 型へのパースはどうにも使い勝手が悪いので、エラーを吐かない Parse を用意してやる。処理速度にはほぼ影響なし。
これだけ。C# は便利。ご賞味あれ。