목차
- CSV 란?
- CSV 파일 데이터 틀 만들기
- CSV Parsing 하는 Class 생성하기
- 데이터의 띄어쓰기 없애기
- Enter 기준으로 한 줄씩 자르기
- 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 폴더를 만들어서
여기 안에 넣어줘야 한다.
이 폴더 안에 있는건 안바뀐다
이거 빌드하면 자동으로 생성되기도 함
파일을 불러오는 경로를 바꾸자
근데 오류가 또 뜬다.
euc-kr 오류 때문에 빌드할 때 오류가 뜨는거임
이 오류는
Plugins 에 어떤 파일을 넣어줘야한다.
C 드라이브에 -> Unity 에 들어간다
그 후,
Editor 에 들어간다
자신이 쓰고있는 버전에 들어간다
여기 들어가고
--->
--->
--->
--->
--->
을 Plugins 를 만든 폴더에 넣자
그러면 오류 해결!