summaryrefslogtreecommitdiff
path: root/WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs
diff options
context:
space:
mode:
Diffstat (limited to 'WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs')
-rw-r--r--WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs137
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