UnityでCSVファイルを読み込むときにCsvHelperを使うサンプルが見当たらなかった&フツーのC#な人たちはnugetを使うのがデフォルトといいますか、使い慣れてると思うんですがUnity周りの人たちは意外と知らなかったりするんじゃないかなーと思い、記載してみました。
Unityでは使えないライブラリも多いと思いますが、C#使っててnuget使わないともったいないかもですよ。
UnityでCSVを簡易に扱うなら
string line = reader.ReadLine();
string[] values = line.Split(',');
というようにSplitで「,」で区切るだけでもいいのですが、「,」がCSV文中に含まれている場合などに対応できません。
そこで、CsvHelperの助けを借ります。
CsvHelperはC#でCSVファイルを読み込むためのライブラリです。
http://joshclose.github.io/CsvHelper/
まずはnugetのサイトを開く。
画面左側のDownloadをクリックすると
csvhelper.X.X.X.nupkg (X.X.X部分はバージョン番号により可変)がダウンロードできる。
このファイルは実のところzipファイルなので適当な解凍ソフトで解凍する。
/lib/net20 フォルダにあるCsvHelper.dllだけが必要。他のファイルは必要なし。
CsvHelper.dll をUnityプロジェクトのAssets以下のどこかに置く。
で、あとは以下のように使用します。
using System.IO;
using System.Text;
using UnityEngine;
using CsvHelper;
public class sample : MonoBehaviour
{
void Load()
{
TextAsset csv = Resources.Load( "sample_csv" ) as TextAsset;
StringReader strReader = new StringReader(csv.text);
CsvReader csvReader = new CsvReader(strReader);
while (csvReader.Read())
{
string[] records = csvReader.CurrentRecord;
Debug.Log(records[0]);
Debug.Log(records[1]);
Debug.Log(records[2]);
}
}
}
CSVファイルの1行目は強制的にヘッダ行(フィールド定義行)とみなされるので注意。
自作クラスにマッピングする形での読み込み等もできる。
そのあたりの詳しくは以下リンク参照。
http://kageura.hatenadiary.jp/entry/2015/05/01/193000
http://kageura.hatenadiary.jp/entry/2015/05/20/200000