using System; using System.Collections.Generic; using System.Text; namespace Game.Config { public class CsvWriter where T : GameData { private StringBuilder data; private string name; private string path; public string Data { get => data.ToString(); } public CsvWriter(string wpath,string fname,List datas, GameDataFormatInfo dataFormatInfo = null) { data = new StringBuilder(); name = fname; path = wpath; GameDataToString (datas,dataFormatInfo); } private void GameDataToString(List datas, GameDataFormatInfo dataFormatInfo) { //Type type = Type.GetType($"Game.Config.{name}"); Type type = typeof(T); GameDataFormatInfo info = dataFormatInfo; if (info == null) info = null;//GameDatabase.Instance.GetGameDataFormatInfo(name); if (info == null) { return; } data.Append(ToCsvLine(info.Fileds)); data.Append(ToCsvLine(info.Types)); foreach (GameData gd in datas) { string[] linedatas = ExcelParser.Deserialize(type, gd,info.Fileds); string line = ToCsvLine(linedatas); data.Append(line); } } public void Write(Action callback = null) { //FileHelper.WirteStringToFileAsync(path, data.ToString(), callback); FileHelper.WirteStringToFile(path, data.ToString()); } public static string ToCsvLine(string[] datas) { StringBuilder sb = new StringBuilder(); int length = datas.Length; int end = length-1; for (int i = 0; i < length; i++) { string str = datas[i]; if (str.IndexOf(',') >= 0) { str = FileHelper.AddHeadandTailChar(str, '"'); } if (i < end) { sb.Append($"{str},"); } else { sb.Append($"{str}\r\n"); } } return sb.ToString(); } } }