이번 포스팅에서는 앞서 만든 Enum 타입 변환기에 같이 넣을 주된 기능 중 하나를 추가했습니다.
링크 를 통해 해당 포스팅 내용을 확인할 수 있습니다.
데이터 타입은 XML, Json, CSV 등등 회사나 팀마다 각각 다르게 로드하여 사용하고 있습니다.
가장 처음에 목표로 했던 데이터 형식은 XML 이었고, 가장 최근에 데이터를 뽑아서 사용한 건 CSV 이어서 둘 중, 고민하다가 결국 XML로 작성해보기로 했습니다.
제작 : C# Winform
사용 라이브러리
System.Xml
외에는 이전 포스팅에 기재되어있습니다.
XML Data Exporter
1. 제작 의도
이전 회사에서 경험상 엑셀을 사용하여 XML 데이터를 뽑기 위해서는 스키마라는 것을 씌워서 XML로 다른이름 저장하여 작업을 진행해야 했습니다.
일일히 스키마에 대해 교육을 하거나, 실수등에 대한 비용을 줄이는 것이 효율적이라고 생각하여, 이전부터 생각하던 추출기를 제작했습니다.
2. 제작으로 인해 얻는 이득
스키마 교육에 대한 필요성이 사라진다고 생각합니다.
필요 공수와 실수가 줄어들 수 있을 것이라고 생각합니다.
3. 툴의 한계점
데이터 추출 & 로드가 일반적으로 잘 된다면 추출기로써의 역할은 충분할 것입니다.
스탠다드한 추출기가 아니라 개개인이나 팀이 사용하는 커스텀 추출기이기 때문에 버그발생시 작성자가 수정해야합니다.
필요한 기능이 생기면 커스텀한 내용을 수정해야 합니다.
XML Data Exporter Tips
파일의 세부 규칙입니다.
파일
타입변환기에서 접두어로 "Field"로 분류하고 있기 때문에 Field로 시작하지 않으면 됩니다.
Field가 맨처음 붙지 않은 테이블의 경우는 모두 데이터 추출타입으로 생각하여 작업을 진행합니다.
데이터
XML 데이터 형식으로 작성되며, 한 행의 데이터를 하나의 오브젝트로 간주하도록 했습니다.
데이터 내 <Item></Item> 까지가 하나의 오브젝트입니다.
컬럼
컬럼 (0,0) 내용에 "Link" 없을 시 변환하지 않습니다.
컬럼의 변환 시작은 (0,3) 부터 시작합니다.
이는 데이터에 대한 분류도 필요하기 때문에 한 행 더 사용합니다.변환은 Y 방향으로 아래로 증가하며, 빈 공간이 발견될때까지 변환합니다.
추출기 사용 과정
추출기의 사용 과정입니다.

타입 변환기와는 다르게, 1번째 행에 각 데이터들의 이름이 들어갑니다.
2번째 행은 그 데이터의 타입들이 들어갑니다.
(추후, 카테고리 탭처럼 만들 예정입니다)
3번째 행부터는 실제 입력(저장)이 되는 데이터입니다.

출력을 하기 전 목록에 들어가있는 데이터 타겟 파일입니다.
시트로는 LoadData, LoadQuickSlot이 들어가있습니다.

추출을 한 결과이고 1번부터 차근차근 설명해보면,
1번의 폴더는 추후 추출기가 빌드파일로 뽑혀 배포된다고 가정했을 때, 상대경로등을 파악해서 임의의 폴더를 만들고 하는것보다, 빌드파일(exe프로그램)이 있는 폴더에서 추출이 되는것이 사용하기 편해보여서 폴더가 만들어지는 곳을 옮겨두었습니다.
그 이하로는
ㄴ GameData(데이터일 경우) or Field(타입변환일 경우)
ㄴ 엑셀의 파일명을 가진 폴더
ㄴ 엑셀의 시트별로 파일 분리
이렇게 분리하여 관리할 수 있도록 카테고리화를 진행했습니다.

실제 데이터가 저장된 LoadData.txt 파일입니다.
현재는 읽고 수정할 수 있도록 작업되어 있지만, 추후 실제 게임데이터로 배포되어야 하는 경우에는 저장전에 암호에 넣을 비트를 추가해서 바이너리화를 진행할 예정입니다.
이제 데이터를 로드하는 부분만 남았습니다.
데이터를 쓰는 부분은 커스텀으로 만들어서 진행했지만, 로드하는 부분은 GPT에 물어보니, 미리 만들어져 있는 XML 리더가 최적화 등이 진행되어 있어, 만들어서 사용하는 것 보다 용이하다는 결과를 알려주어 사용하여 로드를 진행했습니다.
아래는 실제 LoadData.txt 파일을 로드하여 데이터를 담은 오브젝트로 변환한 내용입니다.

이렇게 툴을 제작해서 로드까지 완성했습니다.
아직 제네릭을 넣어서 사용하기 쉽게 일반화를 하진 않았지만, 추출한 폴더를 연다거나, 등록된 테이블을 일괄 삭제한다거나, 필요 기능을 더 추가할것이 한참 남은것 같습니다.
나머지는 게임을 만들면서 추가하는 것으로 해야할 것으로 보입니다.
기능 추가한 후엔, 공유할 내용이 생기면 리마인드를 위해 포스팅을 작성하도록 하겠습니다.
긴 글 읽어주셔서 감사합니다.