Edited at

UnityでCSVを扱う。または如何にしてnugetを使って楽をするか。

More than 3 years have passed since last update.

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ファイルなので適当な解凍ソフトで解凍する。

ss.png

/lib/net20 フォルダにあるCsvHelper.dllだけが必要。他のファイルは必要なし。

CsvHelper.dll をUnityプロジェクトのAssets以下のどこかに置く。

で、あとは以下のように使用します。


sample.cs


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