[Unity3D/C#] CSVReader (엑셀 파일 리더기)
비주얼 같은 경우 NuGet 솔루션 패키지 관리에서 다운 받아서 사용했습니다.
(유니티에서 보자면... 에셋 스토어 - 무료 패키지 같은 느낌... 이랄까요!)
https://hungry2s.tistory.com/204?category=526895
그런데 유니티에서는 어떻게 써야 할지 찾아보았습니다.
유니티는 직접 코딩하거나 라이브러리를 다운 받아서(혹은 만들거나) 사용하고자 했는데, 더 쉬운 자료가 있네요.
굳이 힘들게 할 필요 없으니 이용해볼까 합니다.
이 엑셀 리드의 메커니즘은.
1. 엑셀 파일을 실행 후 다른 이름으로 저장 - csv(쉼표로 분리)로 저장 시 csv 파일로 저장이 됩니다.
2. csv 파일은 엑셀 파일의 각 열을 쉼표로 분리하여 저장합니다.
3. 저장된 데이터를 split(쉼표)로 잘라서 사용. - 끝 -
엑셀의 1행에는 header(머리말)이 들어가도록 돼 있어서, 보기도 쉽네요.
(리더기는 2행 1열부터 읽음)
엑셀 리드 코딩은 간단합니다.
구글링 합시다.
출처 : https://github.com/tikonen/blog/tree/master/csvreader
(2014년 9월 13일 자 글)
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
public class CSVReader
{
static string SPLIT_RE = @",(?=(?:[^""]*""[^""]*"")*(?![^""]*""))";
static string LINE_SPLIT_RE = @"\r\n|\n\r|\n|\r";
static char[] TRIM_CHARS = { '\"' };
public static List<Dictionary<string, object>> Read(string file)
{
var list = new List<Dictionary<string, object>>();
TextAsset data = Resources.Load (file) as TextAsset;
var lines = Regex.Split (data.text, LINE_SPLIT_RE);
if(lines.Length <= 1) return list;
var header = Regex.Split(lines[0], SPLIT_RE);
for(var i=1; i < lines.Length; i++) {
var values = Regex.Split(lines[i], SPLIT_RE);
if(values.Length == 0 ||values[0] == "") continue;
var entry = new Dictionary<string, object>();
for(var j=0; j < header.Length && j < values.Length; j++ ) {
string value = values[j];
value = value.TrimStart(TRIM_CHARS).TrimEnd(TRIM_CHARS).Replace("\\", "");
object finalvalue = value;
int n;
float f;
if(int.TryParse(value, out n)) {
finalvalue = n;
} else if (float.TryParse(value, out f)) {
finalvalue = f;
}
entry[header[j]] = finalvalue;
}
list.Add (entry);
}
return list;
}
}
그리고 필요한 곳에서
List<Dictionary<string, object>> 변수명 = CSVReader.Read("파일명(확장자x)");
선언 후 데이터를 사용하면 된다.
for(int i=0; i<data_dialog.Count; i++)
{
Debug.Log("i : " + i + " [ " + 변수명[i]["damage"].ToString() + " ] " + " [ " + data_dialog[i]["hp"].ToString() + " ] ");
}
(ex) i : 1 [ 1 ] [ 1 ]
이런 식으로 출력된다.
다만, 필요에 따라 수정이 필요할 듯하다.
* 파일 경로 *
- 기본적으로 Resources.Load를 사용하기 때문에 Resources 폴더에 있는 csv를 사용하는 장점이자 단점이 있다.
서버나 다른 경로에서 읽어오기 위해서 stream으로 변경해서 사용하는 게 더 활용도가 높을 듯.
'프로그래밍 > Unity3D' 카테고리의 다른 글
[Unity3D-php] JSON Parsing error (array type) (0) | 2021.04.20 |
---|---|
[Unity3D/펌] 쉐이도 강좌 - 기초 (0) | 2016.07.08 |
[Unity3D]Rejected because no crossdomain.xml policy file was found (0) | 2015.12.24 |
[Unity3D/FacebookAPI] Unable to verify assembly data; you must provide an authorization key when loading this assembly. (0) | 2015.08.26 |
[Unity3D] 드로우 콜 (Draw Call)에 관하여 (0) | 2015.08.19 |