Q. .csv파일을 어떡해 가지고 와?
A.
해당 코드에 주석과 순서를 적었으니 참고하여 사용하면됨
//1.경로 설정
string csvFilePath = @"..\..\..\Data\TextRPG_Quest.csv";
// 2. 읽어올 데이터를 저장할 컨테이너 선언 및 초기화
Dictionary<int, Quest> csvData = new Dictionary<int, Quest>();
//3. CSV 파일을 UTF-8 인코딩으로 읽기
using (var reader = new StreamReader(csvFilePath, Encoding.UTF8))
{
//첫줄은 보통 항목이기에 header라고 하여 읽어줌
string headerLine = reader.ReadLine(); //카테고리
string[] headers = headerLine.Split(','); //문자열 카테고리 분류
//그 다음 줄부터는 Data이기에 끝문자(\n)일때까지 읽기
string line;
while ((line = reader.ReadLine()) != null)
{
string[] values = line.Split(',');
//TODO CODE : 배열로 들어간 데이터를 파싱해서 사용하는 코드 작성
}
구현 (퀘스트 매니저)
더보기
internal class QuestManager
{
StringBuilder _strbuilder = new StringBuilder(); //문자열 최적화를 위한 스트링빌더 선언
Dictionary<int, Quest> _quests;
public Dictionary<int, Quest> Quests { get { return _quests; } }
Dictionary<int, Quest> _acceptedQuest; //플레이어가 수락한 퀘스트
public Dictionary<int, Quest> AcceptedQuest { get { return _acceptedQuest; } }
public QuestManager()
{
string csvFilePath = @"..\..\..\Data\TextRPG_Quest.csv";
// 1. CSV 파일을 UTF-8 인코딩으로 읽기
Dictionary<int, Quest> csvData = new Dictionary<int, Quest>();
using (var reader = new StreamReader(csvFilePath, Encoding.UTF8))
{
string headerLine = reader.ReadLine(); //카테고리
string[] headers = headerLine.Split(','); //문자열 카테고리 분류
string line;
while ((line = reader.ReadLine()) != null)
{
string[] values = line.Split(',');
//0 퀘스트 ID
//1 퀘스트 이름
//2 퀘스트 내용
//3 퀘스트 목적
//4 퀘스트 현재 진행도 (최초 0)
//5 퀘스트 목표 진행도
//6 퀘스트 클리어 유무
//7 퀘스트 보상 이름
//8 퀘스트 보상 갯수
//9 퀘스트 보상 골드
//10 퀘스트 타입
_strbuilder.Clear();
Quest quest = new Quest();
quest.Label = values[1];
_strbuilder.Append(ApplyEscapeCharacters(values[2]));
quest.Detail = _strbuilder.ToString();
quest.Purpose = values[3];
quest.CurProgressRequired = int.Parse(values[4]);
quest.EndProgressRequired = int.Parse(values[5]);
quest.IsFinish = bool.Parse(values[6]);
quest.RewardType = values[7];
quest.RewardValue = values[8];
quest.RewardGold = int.Parse(values[9]);
quest.Type = values[10];
csvData.Add(int.Parse(values[0]), quest);
}
if (csvData != null)
{
_quests = csvData;
}
//플레이어가 수락한 퀘스트 리스트 생성
if(_acceptedQuest == null)
{
_acceptedQuest = new Dictionary<int, Quest>();
}
}
}
private string ApplyEscapeCharacters(string input)
{
// 예시로, 줄바꿈 문자를 이스케이프 화시킴
input = input.Replace("\\n", "\n");
input = input.Replace("\\t", "\t");
// 다른 이스케이프 문자도 필요에 따라 처리할 수 있다.
return input;
}
'내일배움캠프_Unity_6기 > TIL(Today I Learend)' 카테고리의 다른 글
TIL : 2024-10-02(수) :: C# 직렬화/역직렬화시 주의할점(접근제한자로 인한 더미데이터 생성 및 데이터가 복사될때) (0) | 2024.10.02 |
---|---|
TIL : 2024-10-01(화) :: C# 문자열 변수를 enum 자료형으로 형변환하기,박싱/언박싱을 지양해야되는 이유 (0) | 2024.10.01 |
TIL : 2024-09-27(금) :: 직렬화,역직렬화 간단 설명 (0) | 2024.09.27 |
TIL : 2024-09-26(목) :: GitHub 협업시 코드컨벤션 (0) | 2024.09.26 |
TIL : 2024-09-24(화) :: 정렬 알고리즘(C#구현) (0) | 2024.09.24 |