diff options
Diffstat (limited to 'WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs')
-rw-r--r-- | WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs b/WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs deleted file mode 100644 index 207656b..0000000 --- a/WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs +++ /dev/null @@ -1,137 +0,0 @@ -using JetBrains.Annotations; -using LitJson; -using Newtonsoft.Json.Serialization; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Net.Mime; -using System.Reflection; -using UnityEngine; -using yutokun; -using static UnityEngine.Rendering.DebugUI; - -namespace WK.Data -{ - - public class CSVReader - { - private static Dictionary<string/*key*/, int/*index*/> m_KeyMapping = new Dictionary<string, int>(); - private static List<List<string>> m_Rows = new List<List<string>>(); - - /// <summary> - /// 解析csv表格,并返回列表 - /// </summary> - /// <typeparam name="T"></typeparam> - /// <param name="content"></param> - /// <returns></returns> - public static List<T> Read<T>(string content) where T : new() - { - List<T> result = new List<T>(); - Read<T>(result, content); - return result; - } - - /// <summary> - /// 解析csv表格,并返回数量 - /// </summary> - /// <typeparam name="T"></typeparam> - /// <param name="content"></param> - /// <returns></returns> - public static int Read<T>(List<T> target, string content) where T : new() - { - m_KeyMapping.Clear(); - m_Rows.Clear(); - - m_Rows = CSVParser.LoadFromString(content); - // 第一行是key - List<string> keys = m_Rows[0]; - for (int i = 0; i < keys.Count; ++i) - { - m_KeyMapping.Add(keys[i], i); - } - int count = 0; - Type type = typeof(T); - for (int i = 1; i < m_Rows.Count; ++i) - { - if (m_Rows[i][0][0] == '#') // 注释 - continue; - List<string> row = m_Rows[i]; - T obj = new T(); - foreach (var key in m_KeyMapping) - { - int index = key.Value; - var fieldInfo = type.GetField(key.Key); - if (fieldInfo != null) - { - 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)); - } - } - } - target.Add(obj); - count++; - } - return count; - } - - /// <summary> - /// 解析csv表格,并按key存储到字典里,返回数量 - /// </summary> - /// <typeparam name="TKey"></typeparam> - /// <typeparam name="TValue"></typeparam> - /// <param name="target"></param> - /// <param name="content"></param> - /// <param name="keyName"></param> - /// <returns></returns> - public static int ReadDictionary<TKey, TValue>(Dictionary<TKey, TValue> target, string content, string keyName) where TValue : new() - { - List<TValue> data = CSVReader.Read<TValue>(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; - } - - } - -}
\ No newline at end of file |