Unity读取.csv文件

///
/// 配置的基类
///
public class ConfigTable

if UNITY_EDITOR

    tableStream = new FileStream(configPath, FileMode.Open);

else

    var tableData = Resources.Load<TextAsset>(configPath);
    tableStream = new MemoryStream(tableData.bytes);

endif

    // 读表
    using (var reader = new StreamReader(tableStream, Encoding.GetEncoding("UTF-8")))
    {
        // 前两行非数据,跳过去
        var lineStr = reader.ReadLine();
        // 读字段名
        lineStr = reader.ReadLine();
        var columList = lineStr.Split(',');
        List<FieldInfo> filedInfoList = new List<FieldInfo>();
        foreach (var columName in columList)
        {
            var fieldInfo = typeof(TDatabase).GetField(columName);
            if (fieldInfo == null)
            {
                Debug.LogError(string.Format("{0}表,字段:{1} 无法解析", typeof(T).Name, columName));
            }
            filedInfoList.Add(fieldInfo);
        }

        // 开始读数据
        lineStr = reader.ReadLine();
        while (lineStr != null)
        {
            loadLine(filedInfoList, lineStr);
            lineStr = reader.ReadLine();
        }
    }
}

private void loadLine(List<FieldInfo> filedInfoList, string lineStr)
{
    var item = new TDatabase();
    var itemList = new List<string>(lineStr.Split(','));
    for (int i = 0; i < itemList.Count; ++i)
    {
        var fieldInfo = filedInfoList[i];
        var itemValue = itemList[i];

        if (fieldInfo == null)
        { continue; }

        // 整型
        if (fieldInfo.FieldType == typeof(int))
        {
            fieldInfo.SetValue(item, int.Parse(itemValue));
        }
        // 浮点型
        else if (fieldInfo.FieldType == typeof(float))
        {
            fieldInfo.SetValue(item, float.Parse(itemValue));
        }
        // 字符串
        else if (fieldInfo.FieldType == typeof(string))
        {
            fieldInfo.SetValue(item, itemValue);
        }
        // 整型数组
        else if (fieldInfo.FieldType == typeof(List<int>))
        {
            var intList = new List<int>();
            foreach (var arrayItem in itemValue.Split('$'))
            {
                intList.Add(int.Parse(arrayItem));
            }
            fieldInfo.SetValue(item, intList);
        }
        // 字符串数组
        else if (fieldInfo.FieldType == typeof(List<string>))
        {
            var intList = new List<string>(itemValue.Split('$'));
            fieldInfo.SetValue(item, intList);
        }
        // 同一个dll的type类型
        else if (fieldInfo.FieldType == typeof(Type))
        {
            Type type = Type.GetType(itemValue);
            fieldInfo.SetValue(item, type);
        }
    }

    _cache.Add(item.ID, item);
}

}

public class LoadDatabase
{
//表中字段名
public string name;
}

///加载
public class Load:ConfigTable

猜你喜欢

转载自blog.csdn.net/qq_38456478/article/details/78553358