개발 TIL

6/19 부트캠프 개발 TIL (CSV 사용하기)

HJTL 2024. 6. 20. 21:15

오늘은 CSV를 어떻게 제어하고 불러오는지 알아볼까 한다.

 

JSON을 설명할때 직렬화라는 개념을 짚었다.

직렬화는 나열된 데이터들을 불러와서 해당하는 데이터를 저장하는 뜻을 말하는데

직렬화방식은 3가지가 대표이다

 

JSON, XML, CSV가 있는데 CSV를 다룰것이다.

 

CSV의 특징은 불러오는 것 밖에 안되지만 엑셀방식으로 데이터를 직렬화하는 것이다.

 

위의 시트의 데이터를 입력하고 csv확장자로 저장하면 (참고로 csv안에 내용은 반드시 있어야 불러올때 헷갈리지 않는다)

 

csv를 메모장으로 열어보면 이렇게 나온다 물론 유니티 에셋창에도 똑같이 나온다.\

 

저장했으면 스크립트로 불러와야 하는데

public class CSVData
{
    public string Event;
    public string Name;
    public string Descript;

    public CSVData(string _event, string _name, string _descript)
    {
        Event = _event;
        Name = _name;
        Descript = _descript;
    }
}

public class CSVControll : MonoBehaviour
{
    protected Dictionary<string, List<CSVData>> chatData = new Dictionary<string, List<CSVData>>();
    string csvPath = "Chapter/Order/Character/Text/isChoice/";

    //여기에 CSV파일을 불러옴
    public void LoadCSV(string fileName)
    {
        //csv파일 로드
        var csvData = Resources.Load<TextAsset>(csvPath + fileName);
        Deserial(csvData.text.TrimEnd());
    }

    private void Deserial(string data)
    {
        var rowData = data.Split('\n');

        for (int i = 1; i < rowData.Length; i++)
        {
            var datas = rowData[i].Split(',');

            if (chatData.ContainsKey(datas[0]))
            {
                chatData[datas[0]].Add(new CSVData(datas[0], datas[2], datas[3]));
            }
            else
            {
                chatData[datas[0]] = new List<CSVData>();
                chatData[datas[0]].Add(new CSVData(datas[0], datas[2], datas[3]));
            }
        }
    }

    //해당하는 이벤트의 인덱스를 반환
    public string GetName(string _event,int index) //스테이지, 챕터
    {
        if (chatData.ContainsKey(_event))
            return chatData[_event][index].Name;
        else
            return null;
    }

    public string GetDescript(string _event,int index)
    {
        if (chatData.ContainsKey(_event))
            return chatData[_event][index].Descript;
        else
            return null;
    }
}

 

csv를 딕셔너리로 저장을 하여 <string 맨 앞의 키워드, 나머지 데이터>이런 식으로 받아와서 불러왔다.

또한 내가 csv파일의 맨 윗줄의 Name이나 Descript를 가져오고 싶다면 아래 두 매서드처럼 불러오면 된다.

 

(유의할 점은 각 스테이지나 페이즈별로 묶으면 관리가 훨씬 편할 것이다)

 

by 스파르타 코딩클럽