CsvWriter.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace Game.Config
  5. {
  6. public class CsvWriter<T> where T : GameData
  7. {
  8. private StringBuilder data;
  9. private string name;
  10. private string path;
  11. private bool isReflection;//是否反射
  12. public string Data { get => data.ToString(); }
  13. public CsvWriter(string wpath,string fname,List<T> datas, GameDataFormatInfo dataFormatInfo = null,bool isreflection = true)
  14. {
  15. isReflection = isreflection;
  16. data = new StringBuilder();
  17. name = fname;
  18. path = wpath;
  19. GameDataToString (datas,dataFormatInfo);
  20. }
  21. private void GameDataToString(List<T> datas, GameDataFormatInfo dataFormatInfo)
  22. {
  23. //Type type = Type.GetType($"Game.Config.{name}");
  24. Type type = typeof(T);
  25. GameDataFormatInfo info = dataFormatInfo;
  26. if (info == null)
  27. info = null;//GameDatabase.Instance.GetGameDataFormatInfo(name);
  28. if (info == null) { return; }
  29. data.Append(ToCsvLine(info.Fileds));
  30. data.Append(ToCsvLine(info.Types));
  31. foreach (GameData gd in datas)
  32. {
  33. string[] linedatas = null; if (isReflection)
  34. {
  35. linedatas = ExcelParser.Deserialize(type, gd, info.Fileds);
  36. }
  37. else
  38. {
  39. linedatas = ExcelParser.Deserialize_NoReflection(gd, info.Fileds);
  40. }
  41. string line = ToCsvLine(linedatas);
  42. data.Append(line);
  43. }
  44. }
  45. public void Write(Action callback = null)
  46. {
  47. //FileHelper.WirteStringToFileAsync(path, data.ToString(), callback);
  48. FileHelper.WirteStringToFile(path, data.ToString());
  49. }
  50. public static string ToCsvLine(string[] datas)
  51. {
  52. StringBuilder sb = new StringBuilder();
  53. int length = datas.Length;
  54. int end = length-1;
  55. for (int i = 0; i < length; i++)
  56. {
  57. string str = datas[i];
  58. if (str.IndexOf(',') >= 0)
  59. {
  60. str = FileHelper.AddHeadandTailChar(str, '"');
  61. }
  62. if (i < end)
  63. {
  64. sb.Append($"{str},");
  65. }
  66. else
  67. {
  68. sb.Append($"{str}\r\n");
  69. }
  70. }
  71. return sb.ToString();
  72. }
  73. }
  74. }