LoginSignup
0
0

More than 1 year has passed since last update.

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

Posted at

使用方法

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

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;
        }
    }    
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0