外部ファイルの読み込み

2021/01/28

Unity

StreamReaderを使って読み込む場合。
使うときはusing System.IOが必要。
ファイルはカンマ区切りでtxtやcsvファイルが使えます。

今回はcsvファイルを読み込みます。

img_20210119-062531.jpg
保存するときはUTF-8で保存します。
img_20210119-062542.jpg
以下で読み込みです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO; //StreamReaderを使うとき必要

public class ReadFile : MonoBehaviour
{
    List<string[]> List = new List<string[]>(); //保存用リスト
    void Start()
    {
        //読み込み
        string filePath = Application.dataPath + "/" + "ReadTest.csv"; //Assetsフォルダ指定
        StreamReader stream = new StreamReader (filePath,System.Text.Encoding.UTF8);
        string line;
        while ((line = stream.ReadLine()) != null) // 1行ずつ読み出し。
        {
            if (line.Contains("\\n")) line = line.Replace("\\n", System.Environment.NewLine);
            List.Add(line.Split(','));
        }
    }
}

読み込むファイルパスを設定して、1行ずつ読み出してListに保存しています。
filePath = Application.dataPath + "/" + "ReadTest.csv";
でファイルパスを設定。

Application.dataPathは作成したAssetsフォルダを指します。
そのあとフォイル名を指定しています。
dataPathは環境によって指定がことなります。

こちらを参考にさせて頂きました。

if (line.Contains("\\n")) line = line.Replace("\\n", System.Environment.NewLine);
の部分は改行文字の対応をしています。
途中で改行させたい場合は入れておきます。

List.Add(line.Split(','));
','カンマ区切りでデータを区切っています。
カンマも使いたい場合は他の文字を指定します。

データはList[0][0](行、列)で指定できます。


確認用にデータを読んで、表示します。
Textを取得して表示させます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO; //追加

public class ReadFile : MonoBehaviour
{
    List<string[]> List = new List<string[]>();
    public Text[] ListText;

    void Start()
    {
        //読み込み
        string filePath = Application.dataPath + "/" + "ReadTest.csv";
        StreamReader stream = new StreamReader(filePath, System.Text.Encoding.UTF8);
        string line;
        while ((line = stream.ReadLine()) != null) // 1行ずつ読み出し。
        {
            if (line.Contains("\\n")) line = line.Replace("\\n", System.Environment.NewLine);
            List.Add(line.Split(','));
        }

        //確認用
        ListText[0].text = List[0][0];
        ListText[1].text = List[0][1];
        ListText[2].text = List[1][0];
        ListText[3].text = List[1][1];
        ListText[4].text = List[2][0];
        ListText[5].text = List[2][1];
    }
}


テキストを適当に並べて表示させています。
img_20210119-062857.jpg

1行目を項目にする場合は1行目を読み飛ばす処理をいれます。

        stream.ReadLine(); //ヘッダがある場合1行読み飛ばし
        while ((line = stream.ReadLine()) != null) // 1行ずつ読み出し。
        {
            if (line.Contains("\\n")) line = line.Replace("\\n", System.Environment.NewLine);
            List.Add(line.Split(','));
        }

        
今回は簡易的にやってますが、アイテムデータなどで使用する場合は
List等でデータベースを作って、そこに保存してから利用していきます。