| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace Game.Config
- {
- public class CsvWriter<T> 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<T> datas, GameDataFormatInfo dataFormatInfo = null)
- {
- data = new StringBuilder();
- name = fname;
- path = wpath;
- GameDataToString (datas,dataFormatInfo);
- }
- private void GameDataToString(List<T> 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();
- }
- }
- }
|