(Unity 2019.4.11f)データをcsvで書き出す。【AndroidとiOSの外部取り出しにも対応】

# 使用方法
プログラムをコピーして、とりあえず何かにアタッチしたら動きます。

```exportCsvScript.cs
using UnityEngine;
using System.Text;
using System.IO;
using System.Collections.Generic;

public class exportCsvScript : MonoBehaviour
{
    private List<string[]> csvDatas = new List<string[]>(); // CSVの中身を入れるリスト

    private void Start()
    {
        string[] header = { "id", "data1", "data2", "data3" };
        string[] data = { "1", "123", "323", "432" };
        string[] data2 = { "2", "apple", "banana", "mikan" };

        //→プロジェクトのあるフォルダーに作成する場合
        //使用例：UnityからBuildをしない場合、プロジェクト内に生成したい場合
        string path = "savedata.csv";

        //デスクトップに作成する場合「"C:/Users/ユーザー名/デスクトップ/savedata.csv"」
        //使用例：ユーザーがわかりやすいところにファイルを生成したい場合（デスクトップなど）
        //string path = "C:/Users/ユーザー名/デスクトップ/savedata.csv";

        //AndroidやiOSなどOSに依存しないパスの場合「UnityEngine.Application.persistentDataPath + "/savedata.csv"」
        //使用例：AndroidやiOSで外部ファイル取り出しようとして利用
        //string path = UnityEngine.Application.persistentDataPath + "/savedata.csv";

        // ファイルが存在するかを確認
        CheckExixtCSV(path);

        // ファイル書き出し(上書き）
        OverWriteCSV(header, data, path);

        // ファイルが存在するかを確認
        CheckExixtCSV(path);

        // ファイル追記（追加）
        AppendCSV(data2, path);
        
        //csvファイルの読み出し
        List<string[]> csv = ReadCSV(path);
        
        //csvファイルの中身を一つずつ表示する
        foreach(string[] ds in csv)
        {
            foreach(string d in ds)
            {
                Debug.Log(d);
            }

        }
    }

    // ファイル書き出し(上書き）
    public void OverWriteCSV(string[] header, string[] data, string path)
    {
        // 現在のフォルダにsaveData.csvを出力する(決まった場所に出力したい場合は絶対パスを指定してください)
        // 引数説明：第1引数→ファイル出力先, 第2引数→ファイルに追記(true)or上書き(false), 第3引数→エンコード
        // falseにすると、ファイルを新規作成する
        StreamWriter sw = new StreamWriter(path, false, Encoding.GetEncoding("UTF-8"));

        string h = string.Join(",", header);
        sw.WriteLine(h);
        
        //ここで","を付けた形にする(str2に配列strに","を付けたものを代入する）
        string d = string.Join(",", data);

        //ここで初めて書き込む
        sw.WriteLine(d);

        // StreamWriterを閉じる
        sw.Close();


        Debug.Log(path);
    }


    // ファイル書き出し（追加）
    public void AppendCSV(string[] data, string path)
    {
        // 現在のフォルダにsaveData.csvを出力する(決まった場所に出力したい場合は絶対パスを指定してください)
        // 引数説明：第1引数→ファイル出力先, 第2引数→ファイルに追記(true)or上書き(false), 第3引数→エンコード
        // falseにすると、ファイルを新規作成する
        StreamWriter sw = new StreamWriter(path, true, Encoding.GetEncoding("UTF-8"));

        //ここで","を付けた形にする(str2に配列strに","を付けたものを代入する）
        string d = string.Join(",", data);

        //ここで初めて書き込む
        sw.WriteLine(d);

        // StreamWriterを閉じる
        sw.Close();

        Debug.Log(path);
    }

    //csvファイルの読み出し
    public List<string[]> ReadCSV(string path)
    {
        // ファイル読み込み
        // 引数説明：第1引数→ファイル読込先, 第2引数→エンコード
        //Unityのプロジェクトフォルダー内にある場合
        StreamReader sr = new StreamReader(path, Encoding.GetEncoding("UTF-8"));
        string line;

        // 行がnullじゃない間(つまり次の行がある場合は)、処理をする。→最後の行まで読みだす。
        while ((line = sr.ReadLine()) != null)
        {
            // コンソールに出力
            Debug.Log(line);
            csvDatas.Add(line.Split(','));
        }

        // StreamReaderを閉じる
        sr.Close();

        Debug.Log(path);

        return csvDatas;
    }

    //ファイルが存在するかを確認
    public bool CheckExixtCSV(string path)
    {
        if (System.IO.File.Exists(path)){
            Debug.Log("CSVファイルが存在するので追記します");
            return true;
        }
        else
        {
            Debug.Log("CSVファイルが存在しないので作成します");
            return false;
        }
    }    
}
```