CSV文件处理

来源:互联网 发布:php lvs 编辑:程序博客网 时间:2024/06/07 19:25

脚本一CreateCSV用于创建CSV文件,:

using UnityEngine;using System.Collections;using System.Collections.Generic;using System.Text;public class CreatCsv {    private string csvName;    public string CsvName    {        get { return csvName; }        set { csvName = value; }    }    private string csvContent;    public string CsvContent    {        get { return csvContent; }        set { csvContent = value; }    }    private string strContent;    private int nRowCount;    private int nColCount;    public CreatCsv()    {    }    public CreatCsv(CSVClassFiles placeName)    {        this.csvName = placeName.configName;        this.csvContent = placeName.content;        CSVManager.Init.AddCsv(this.csvName, this);    }    public virtual void Init()    {    }    public virtual void Clear()    {    }    public bool ChackCSV()    {        strContent = CsvContent;        string[] strTitle = strContent.Split('\n');        string[] strTemp = strTitle[0].Split(',');        for(int i = 0; i < strTemp.Length ; i++)        {           for(int j = i+1 ; j < strTemp.Length ; j++)           {                  if(strTemp[i] == strTemp[j])                {                    Debug.LogWarning(csvName + "表头有重复");                    return false;                }           }        }        nColCount = strTemp.Length;        return true;    }    public bool AnalyzeCSV()    {        string[] strTitle = strContent.Split('\n');        for (int i = 0; i < strTitle.Length - 1; i++)        {            List<string> list = new List<string>();            string[] strTemp = strTitle[i].Split(',');            for (int j = 0; j < strTemp.Length; j++)            {                string str = strTemp[j];                if (str.Contains("\r"))                {                    str = str.Replace("\r", "");                }                list.Add(str);            }            if(i >= 3)            {                dic[i-3] = list;            }            csvList.Add(list);        }        return true;    }    public int GetIntData(int nRow , int nClo)    {        if ((nRow + 1) > csvList.Count || (nClo + 1) > csvList[nRow].Count)        {            return 0;        }        int value;        if (int.TryParse(csvList[nRow][nClo] , out value))        {            return value;        }        return 0;    }    public int GetRowCount()    {        return csvList.Count;    }    public int GetColCount()    {        if (GetRowCount() > 0)        {            return csvList[0].Count;        }        return 0;    }    public string GetStringData(int nRow, int nClo)    {        if ((nRow + 1) > csvList.Count || (nClo + 1) > csvList[nRow].Count)        {            return null;        }        return csvList[nRow][nClo];    }    public string GetTitle(int nClo)    {        return GetStringData(0, nClo);    }    public List<string> GetList(int nRow)    {        if (dic.ContainsKey(nRow))        {            return dic[nRow];        }        return null;    }    public List<List<string>> csvList = new List<List<string>>();    public Dictionary<int, List<string>> dic = new Dictionary<int, List<string>>();}

脚本二不必介绍:

using UnityEngine;using System.Collections;public class CSVClassFiles : ScriptableObject{    public string configName;    public string content;}

脚本三CsvManager用于管理csv文件:

using UnityEngine;using System.Collections;using System.Collections.Generic;using System.Linq;using System;using DAS;public class CSVManager : Singleton{    public delegate void CreatCSVCallBack(int csvCount);    public delegate void CreatCSVDone();    public CreatCSVDone CreatCSVDoneCallBack;    public static CSVManager Init;    private Dictionary<string, CreatCsv> dic = new Dictionary<string, CreatCsv>();    private int csvCount = 0;    public CSVManager():base(false)    {    }    public override void SingletonUpdate(float fTime, float fDtime)    {    }    public void RegisterCreatCSVDone(CreatCSVDone callback)    {        CreatCSVDoneCallBack += callback;    }    public void RemoveCreatCSVDone(CreatCSVDone callback)    {        CreatCSVDoneCallBack -= callback;    }    public void AddCsv(string str , CreatCsv csv)    {        dic[str] = csv;    }    public T GetCSV<T>(string str)    {        if (dic.ContainsKey(str))        {            object obj = (object)dic[str];            return (T)obj;        }        return default(T);    }    public void LoadCSV()    {        LoadManager.AddDownRequest(ResourceType.Type_CSV, GlobleConfig.strFlieSer + GlobleConfig.allCSVPath, CreadCSV, LoadProCallBack, GlobleConfig.allCSVPath);        LoadManager.AddDownRequest(ResourceType.Type_CSV, GlobleConfig.strFlieSer + GlobleConfig.allScenesInfoPath, CreadCSV, LoadProCallBack, GlobleConfig.allScenesInfoPath);    }    private void LoadProCallBack(float value, object customParam)    {        Debug.LogWarning("LoadPro = " + value + " url = " + (string)customParam);    }    private void CreadCSV(AssetBundle bundle, object customParam)    {        if (bundle != null)        {            UnityEngine.Object[] objs = bundle.LoadAll(typeof(CSVClassFiles));            for (int num = 0; num < objs.Length; num++)            {                UnityEngine.Object obj = objs[num];                if (obj == null)                {                    continue;                }                CSVClassFiles csv = obj as CSVClassFiles;                if (csv.configName.Contains("cfg_Scene_"))                {                    SceneMgr sceneMgr = (SceneMgr)SingletonMgr.Inst.GetSingleton(SingletonDefine.s_SceneMgr);                    ScenesCSV scenesCSV = new ScenesCSV(csv);                    sceneMgr.AddSceneCSV(csv.configName, scenesCSV);                }                if (csv.configName == GlobleConfig.csvEquipStone)                {                    new EquipStoneCSV(csv);                }                else if (csv.configName == GlobleConfig.csvPlayerConfig1)                {                }                else if (csv.configName == GlobleConfig.csvConfig)                {                }                else if (csv.configName == GlobleConfig.csvOpenFun)                {                    new OpenFunCSV(csv);                }                else if (csv.configName == GlobleConfig.csvDeviceInfo)                {                    new DeviceInfoCSV(csv);                }             }            bundle.Unload(false);            if (customParam != null)            {                //Debug.LogWarning("customParam = " + customParam);                if (customParam == "Config/AllCSVInfo.unity3d")                {                }            }            csvCount++;            if (csvCount == 2)            {                CreatCSVDoneCallBack();            }        }    }}

脚本4下载:

using UnityEngine;using System.Collections;using System;using System.Collections.Generic;using DAS;public class LoadManager : Singleton{    public static LoadManager Init = null;    public delegate void DownFinishDelegate(AssetBundle wwwObj, object customParam);    public delegate void DownLoadProgressDelegate(float value, object customParam);    private static Dictionary<string, AssetBundle> dic = new Dictionary<string, AssetBundle>();    private static Dictionary<string, WWWRequest> m_WWWMap = new Dictionary<string, WWWRequest>();    public LoadManager():base(false)    {    }    public class WWWRequest    {        public ResourceType type;        public string requestURl;        public DownFinishDelegate calbackFun;        public DownLoadProgressDelegate LoadProCallBack;        public WWW wwwObject = null;        public bool bHasDeal = false;        public int loadSize;        public List<object> customParams = new List<object>();         public WWWRequest() { }        public WWWRequest(ResourceType resType ,string url, DownFinishDelegate cbFun,DownLoadProgressDelegate LoadPro, object customParam = null)        {            type = resType;            requestURl = url;            calbackFun = new DownFinishDelegate(cbFun);            LoadProCallBack = new DownLoadProgressDelegate(LoadPro);            try            {                wwwObject = new WWW(url);            }            catch(Exception ex)            {                Debug.LogWarning(ex.Message);            }            customParams.Add(customParam);        }    }    //WWW Request List    public static void AddDownRequest(ResourceType type , string url, DownFinishDelegate callBackFun, DownLoadProgressDelegate LoadPro = null, object customParam = null)    {        if (url != "")        {            //增加新的资源下载需求            if (!m_WWWMap.ContainsKey(url))            {                m_WWWMap.Add(url, new WWWRequest(type ,url, callBackFun, LoadPro, customParam));            }            else            {                //已经提交相同请求,但是没有下载完成                if (!m_WWWMap[url].wwwObject.isDone)                {                    m_WWWMap[url].calbackFun += callBackFun;                    m_WWWMap[url].customParams.Add(customParam);                }                //已下载资源,直接调用回调函数                else                {                    callBackFun(m_WWWMap[url].wwwObject.assetBundle, customParam);                }            }        }    }    public static void UnloadAllRes()    {        foreach (KeyValuePair<string, WWWRequest> wwwPair in m_WWWMap)        {            wwwPair.Value.wwwObject.assetBundle.Unload(true);        }        m_WWWMap.Clear();        Resources.UnloadUnusedAssets();        System.GC.Collect();    }    public static void UnloadSingleRes(string resName)    {        foreach (KeyValuePair<string, WWWRequest> wwwPair in m_WWWMap)        {            if (wwwPair.Key.Contains(resName))            {                wwwPair.Value.wwwObject.assetBundle.Unload(true);                m_WWWMap.Remove(resName);                Resources.UnloadUnusedAssets();                break;            }        }    }    // Update is called once per frame    public override void SingletonUpdate(float fTime, float fDtime)    {        foreach (KeyValuePair<string, WWWRequest> wwwPair in m_WWWMap)        {            WWWRequest wwwReq = wwwPair.Value;            //try            //{            //    if (wwwReq.wwwObject == null || wwwReq.wwwObject.assetBundle == null)            //    {            //        continue;            //    }            //}            //catch (Exception ex)            //{            //    Debug.LogWarning(ex.Message);            //}            //如果尚未调用回调,并且下载完成,则调用            if ((!wwwPair.Value.bHasDeal && wwwReq.wwwObject.isDone && wwwReq.wwwObject.assetBundle != null))            {                for (int i = 0; i < wwwReq.calbackFun.GetInvocationList().GetLength(0); i++)                {                    ((DownFinishDelegate)wwwReq.calbackFun.GetInvocationList()[i]).Invoke(wwwReq.wwwObject.assetBundle, wwwReq.customParams[i]);                    wwwReq.wwwObject.assetBundle.Unload(false);                    //wwwReq.wwwObject.Dispose();                }                wwwPair.Value.bHasDeal = true;            }            //if (!wwwReq.wwwObject.isDone)            //{            //    for (int i = 0; i < wwwReq.calbackFun.GetInvocationList().GetLength(0); i++)            //    {            //        ((DownLoadProgressDelegate)wwwReq.LoadProCallBack.GetInvocationList()[i]).Invoke(wwwReq.wwwObject.progress, wwwReq.requestURl);            //    }            //}        }    }}
原创粉丝点击