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

  • 15
    Like
  • 0
    Comment
More than 1 year has 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