본문 바로가기

카테고리 없음

CSV_(데이터 가공하기, Generic 으로 사용, 빌드 했을 때 오류 고치기)

목차


CSV 란?

 

csv => 쉼표로 구분 된 값

Comma Sperated Values 

라고 해서 CSV 이다.

 

멘토님이 만들어 놓으신 csv 파일

지금은 엑셀처럼 보이긴 함

 

근데 이거를 메모장으로 열어보면?

(연결프로그램-> 메모장)

이렇게 Comma 로 구분되어있음

이걸 Asset 폴더에 넣어보면

Txt 파일로 저렇게 나옴


CSV 파일 데이터 틀 만들기

 

이제 이 데이터를 담으려면, name, phone, email, age 의 리스트가 필요하다고 

생각해야만 한다!

 

DataManager 오브젝트와 Script 를 생성해서 넣자

이렇게 우리가 데이터를 담을 변수의 클래스를 작성한다

 

CSV 의 맨 윗줄을 이렇게 변수로 써야하기 때문에

기획자한테 해달라고 할 때, 맨 윗줄은 영어로 변수로 해달라고 해야함

 

이제 CSV 파일을 읽어서 분해 해야함

==> 이걸 Parsing 이라고 함 (Parse)

 

이 데이터매니져를 싱글톤으로 구현

 

위 코드는 어디를 들고가도 계속 생기게 해주는 코드다

이게 한 세트!!

 

instance 가 없을 때 이걸 넣고, 이 GameObject 를 지우지 않게 해준다.

그게 아니면 지우자.

 

=> 내 것이 등록되어있으면 내 꺼 쓰고, 그 다음부터는 이미 등록되어있으니까

또 생성하지 말고 지우자는 거임.

이렇게 안하면 씬 변경할 때마다 계속 생성됨

 

만약

그냥 instance= this 라고 하면 씬전환 되면 없어지는 거임

 


CSV Parsing 하는 Class 생성하기

 

 

CSV 라는 이름의 Scripts 를 생성하자

Data Manager 의 아까 코드

덕분에 이 게임오브젝트는 파괴가 안되기 때문에

CSV 또한 파괴 안된다!

 

 

그러니 간편하게 싱글톤 구현을 한다.

 

반환 자료형을 List 로 해서 Parsing 을 하는 코드를 만든다.

 

내가 가지고 있는 File 을 읽겠다는 의미의 코드다.

주요 코드는 

File.ReadAllText()

인데,

 

여기서 File 을 쓰려면 nameSpace 에

using System.IO; 를 추가해줘야 한다

 

 

DataManager.cs ---> 여기서 csv 에 있는 함수를 불러준다.

파일명과 똑같이 입력해준다,

 

이렇게 나오는데 한글이아님..

뒤에 숫자나 영어는 잘 나오는데, 이름이 한글이라

깨진다.

 

간혹, 이름이 잘 나올 수도 있는데

그건 글자관련한 어떤걸 깔아줘서 그렇다.

 

근데 보통은 저렇게 뜰거임!

이렇게, 처음에 File 을 Byte 로 받아서

 

Encoding 을 통해서 한글로 변환해서 나오게 하는 방법!

euc-kr 로 써도 되고,

위 사진처럼 codePage 라고 숫자를 써도 된다.


데이터의 띄어쓰기 없애기

데이터 (CSV 파일) 안에 혹시나 띄어쓰기가 있을 수도 있기 때문에 띄어쓰기를 없애보자.

 

Trim 을 쓰면 기본값이 space 바 이다.


Enter 기준으로 한 줄씩 자르기

보통 이렇게 쓴다

\r\n 으로 잘라줘야한다.

그냥 \n 으로만 잘라보면 뒤에 \r 이 남아있음

밑에 노란색 박스 안에 있는 코드는

\n 으로 되어있든 \r 으로 되어있든

 

자를 수 있는 코드이다. 

참고!!

 

첫째 줄 변수를 나누기

 

이렇게 하면, variable 이라는 변수 안에

CSV 파일 안에 있는 첫째 줄(변수 줄) 에

각 변수가 담기게 된다

 

지금까지 Parsing 함수

    //Parsing
    public List<UserInfoB> Parsing(string fileName)
    {
        List<UserInfoB> list = new List<UserInfoB>();

        //파일을 읽자
        string path = Application.dataPath + "/" + fileName + ".csv";
        
        byte[] byteData =  File.ReadAllBytes(path);
        string stringData = Encoding.GetEncoding("euc-kr").GetString(byteData);
        print(stringData);

        // 띄어쓰기 없애기
        stringData = stringData.Trim();

        string[] lines = stringData.Split("\r\n");

        //// Enter(\n) 기준으로 한줄 씩 자르기
        //string[] lines = stringData.Split("\n");
        //// Enter(\r) 기준으로 한줄씩 자르기
        //for (int i = 0; i < lines.Length; i++)
        //{
        //    string[] temp = lines[i].Split("\r");
        //    lines[i] = temp[0];
        //}

        //변수 이름 나누기
        string[] variable = lines[0].Split(",");

        return list;
    }

첫 째줄에서 받은 

각 값을 나눠보자

변수만 적혀있는 CSV 의 첫 번째 줄이 아닌,

데이터가 들어가 있는 줄인 두 번째 줄부터

 

, 로 각 값을 잘라서 배열에 하나씩 넣은 코드를 의미함.

각 값을 우리가 아까 만들었던 

List 의 틀에 넣는다

 

DataManager.cs ---->

값을 Inspector 창에서 보기위해

Serializable 을 넣는다

 

여기 열어보면 개인정보가 나온다!


Generic 으로 모든 파일 할 수 있게 하기

 

A반꺼도 해보자

 

A반은 느낌이 다르다.

위의 변수가 다르다.

 

email 에 관련된 사항이 없고

그렇다.

 

이럴때

여기에 파일이름을 또 바꿔주고 할거야? 에바야

아니잖아. 

 

Generic 으로 해보자!

 

DataManager.cs ------>

A 반 정보 틀 만들어주기

 

CSV.cs----->

Parsing 함수를 Generic 으로 만들어주기 위해,

위 처럼 작성한다.

 

 

DataManager.cs ------>

List 변수 설정과

Start 에서 함수 선언을 해준다

 

 

위에서 썼던, 함수를

Parsing 함수를 여기 안에 넣는다.

 

 

for문에 안에 있는 UserInfoB 도

Generic 으로 고쳐줘야 우리가 다양하게 쓸 수 있다.

 

그러기 위해서는 2가지를 적어줘야 한다.

T 를 생성하는 코드를 작성하는데,

이 코드를 작성하기 위해선 

where T : new() 를 적어줘야한다.

 

 

이렇게 하면 누가될 지 모르지만 클래스를 생성 하겠다

그러니까 안에 data.name  이런건 안됨

그래서 오류가 뜨는거야

누가 될 지는 모르니까.

 

그러니

우리는 Field 를 가져올거임!!

 

for문 안에 보면 Field 를 가져오는 방법이 써져 있음.

 

1. 해당 변수의 이름으로 정보를 얻어오는 코드 => 이래서 CSV 의 첫줄의 변수 이름이 중요하다

 

2. 그 변수의 자료형을 알아낸다.

 

3. 그 자료형으로 CSV 의 값을 바꿔주고, data 에 넣는다.

 

list 에 이걸 넣고,

반환한다.


빌드했을 때 오류 고치기

 

이걸 빌드하고 실행을 해보면 오류가 난다!

 

그 이유는

우리가 CSV 파일을 가지고 있어도, 

빌드하면 CSV 파일이 다른 파일로 변형되서 만들어지기 때문에

CSV 파일을 찾을 수가 없다.

 

그렇기 때문에 Assets 폴더에

StreamingAssets 폴더를 만들어서

여기 안에 넣어줘야 한다.

 

이 폴더 안에 있는건 안바뀐다 

StreamingAssets 폴더 생성

이거 빌드하면 자동으로 생성되기도 함

 

여기에 넣자

 

파일을 불러오는 경로를 바꾸자

 

 

근데 오류가 또 뜬다.

euc-kr 오류 때문에 빌드할 때 오류가 뜨는거임

 

이 오류는

Plugins 에 어떤 파일을 넣어줘야한다.

 

 

C 드라이브에 -> Unity 에 들어간다

그 후,

Editor 에 들어간다

자신이 쓰고있는 버전에 들어간다

여기 들어가고

--->

--->

--->

--->

--->

이 파일

 

을 Plugins 를 만든 폴더에 넣자

 

그러면 오류 해결!