From 38e177b0fdf130d6a361ab51c80b5b56ee83f28e Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Fri, 26 May 2023 19:12:36 +0800 Subject: *misc --- WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs | 94 ++++++++++++++++++++-- .../Assets/Scripts/Data/DataManager.cs | 2 +- .../Assets/Scripts/Data/DataManager_Load.cs | 19 ++--- 3 files changed, 99 insertions(+), 16 deletions(-) (limited to 'WorldlineKeepers/Assets/Scripts/Data') diff --git a/WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs b/WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs index 312eba8..207656b 100644 --- a/WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs +++ b/WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs @@ -1,4 +1,6 @@ using JetBrains.Annotations; +using LitJson; +using Newtonsoft.Json.Serialization; using System; using System.Collections; using System.Collections.Generic; @@ -16,7 +18,26 @@ namespace WK.Data private static Dictionary m_KeyMapping = new Dictionary(); private static List> m_Rows = new List>(); + /// + /// 解析csv表格,并返回列表 + /// + /// + /// + /// public static List Read(string content) where T : new() + { + List result = new List(); + Read(result, content); + return result; + } + + /// + /// 解析csv表格,并返回数量 + /// + /// + /// + /// + public static int Read(List target, string content) where T : new() { m_KeyMapping.Clear(); m_Rows.Clear(); @@ -28,7 +49,7 @@ namespace WK.Data { m_KeyMapping.Add(keys[i], i); } - List result = new List(); + int count = 0; Type type = typeof(T); for (int i = 1; i < m_Rows.Count; ++i) { @@ -36,18 +57,79 @@ namespace WK.Data continue; List row = m_Rows[i]; T obj = new T(); - foreach(var key in m_KeyMapping) + foreach (var key in m_KeyMapping) { int index = key.Value; var fieldInfo = type.GetField(key.Key); - if(fieldInfo != null) + if (fieldInfo != null) { - fieldInfo.SetValue(obj, Convert.ChangeType(row[index], fieldInfo.FieldType)); + Type fieldType = fieldInfo.FieldType; + if (fieldType.IsEnum) // 如果是枚举,先转成int + { + int value = int.Parse(row[index]); + fieldInfo.SetValue(obj, value); + } + else + { + fieldInfo.SetValue(obj, Convert.ChangeType(row[index], fieldInfo.FieldType)); + } } } - result.Add(obj); + target.Add(obj); + count++; } - return result; + return count; + } + + /// + /// 解析csv表格,并按key存储到字典里,返回数量 + /// + /// + /// + /// + /// + /// + /// + public static int ReadDictionary(Dictionary target, string content, string keyName) where TValue : new() + { + List data = CSVReader.Read(content); + if (data == null || data.Count == 0) + return 0; + Type type_key = typeof(TKey); + Type type_value = typeof(TValue); + FieldInfo field = type_value.GetField(keyName); + Type type_field = field.FieldType; + int count = 0; + for (int i = 0; i < data.Count; ++i) + { + TValue d = data[i]; + + TKey key = default(TKey); + if (type_key.IsEnum) + { + if(type_field == typeof(string)) + { + key = (TKey)Enum.Parse(type_key, field.GetValue(d).ToString()); + } + else if(type_field == typeof(int)) + { + key = (TKey)field.GetValue(d); + } + } + else + { + key = (TKey)field.GetValue(d); + } + if (key == null) + { + LogHelper.LogError("CSVReader.ReadDictionary(): key is null"); + continue; + } + + target.Add(key, d); + count++; + } + return count; } } diff --git a/WorldlineKeepers/Assets/Scripts/Data/DataManager.cs b/WorldlineKeepers/Assets/Scripts/Data/DataManager.cs index 1c148ee..2667736 100644 --- a/WorldlineKeepers/Assets/Scripts/Data/DataManager.cs +++ b/WorldlineKeepers/Assets/Scripts/Data/DataManager.cs @@ -17,7 +17,7 @@ namespace WK.Data private Dictionary m_BuffMetadata = new Dictionary(); private Dictionary m_CharacterMetadata = new Dictionary(); - private Dictionary m_Filelist = new Dictionary(); + private Dictionary m_Filelist = new Dictionary(); public CharacterStatsMetadata GetCharacterStats(string uid) { diff --git a/WorldlineKeepers/Assets/Scripts/Data/DataManager_Load.cs b/WorldlineKeepers/Assets/Scripts/Data/DataManager_Load.cs index 40b00a7..75de5f3 100644 --- a/WorldlineKeepers/Assets/Scripts/Data/DataManager_Load.cs +++ b/WorldlineKeepers/Assets/Scripts/Data/DataManager_Load.cs @@ -26,8 +26,6 @@ namespace WK.Data yield return Timing.WaitForSeconds(StaticDefine.IntervalLoadFile); } - #region 加载 - /// /// fielist /// @@ -36,15 +34,18 @@ namespace WK.Data TextAsset text = ResourceManager.Instance.LoadAsset(StaticDefine.FileList); string content = text.text; List files = CSVReader.Read(content); - for (int i = 0; i < files.Count; ++i) - { - MetadataFile file = files[i]; - int key = (int)Enum.Parse(typeof(EFileKey), file.key); - m_Filelist.Add(key, file); - } + //for (int i = 0; i < files.Count; ++i) + //{ + // MetadataFile file = files[i]; + // int key = (int)Enum.Parse(typeof(EFileKey), file.key); + // m_Filelist.Add(key, file); + //} + + CSVReader.ReadDictionary(m_Filelist, content, "key"); + + Debug.Log(m_Filelist.Count); } - #endregion } } \ No newline at end of file -- cgit v1.1-26-g67d0