コード例 #1
0
ファイル: Class1.cs プロジェクト: HEIENTAI/SoulOfSword
 public void TestReadStartTokenNotFirstRowTableToJsonString()
 {
     string jsonString = string.Empty;
     string debugString = string.Empty;
     Console.WriteLine(string.Format("path = {0}", exceDirectorylPath));
     EnumClassValue test = new EnumClassValue(typeof(EventData), "EventData_StartTokenNotFirstRow");
     ReadExcelToJsonStringError error = _excelToJsonString.ReadExcelFile(exceDirectorylPath, test, NeedReadSite.CLIENT, out jsonString, out debugString);
     Assert.AreEqual(ReadExcelToJsonStringError.NONE, error);
 }
コード例 #2
0
        /// <summary>
        /// 讀取excel檔案,不論是否有錯誤,回傳前都會關閉檔案
        /// </summary>
        /// <param name="directoryPath">資料夾路徑</param>
        /// <param name="dataLoadTag">資料轉換的資訊</param>
        /// <param name="needReadSite">轉出資料是哪方(Server/Client)需要</param>
        /// <param name="jsonString">對應輸出的json字串</param>
        /// <param name="debugString">偵錯字串</param>
        /// <returns>可能有的錯誤訊息</returns>
        public ReadExcelToJsonStringError ReadExcelFile(string directoryPath, EnumClassValue dataConvertInfo, NeedReadSite needReadSite, out string jsonString, out string debugString)
        {
            if (string.IsNullOrEmpty(dataConvertInfo.FileName) || dataConvertInfo.ClassType == null)
            {
                ReadExcelFileEnd(null, out jsonString, out debugString);
                return ReadExcelToJsonStringError.ENUM_ATTRIBUTE_ERROR;
            }

            ReadExcelToJsonStringError readExcelError = _excelToTable.OpenExcelFile(directoryPath, dataConvertInfo.FileName);
            if (readExcelError != ReadExcelToJsonStringError.NONE)
            {
                ReadExcelFileEnd(null, out jsonString, out debugString);
                return readExcelError;
            }

            List<string> allType;
            readExcelError = _excelToTable.CheckAndReadTableHeader(needReadSite, out allType);
            if (readExcelError != ReadExcelToJsonStringError.NONE)
            {
                ReadExcelFileEnd(null, out jsonString, out debugString);
                return readExcelError;
            }

            #region 確認各欄位和要被寫入的物件欄位Type有對應
            object checkObject = Activator.CreateInstance(dataConvertInfo.ClassType);
            List<string>.Enumerator tableTypeEnumerator = allType.GetEnumerator();
            bool isConform = CheckObjectTypeCorrect(dataConvertInfo.ClassType, checkObject, ref tableTypeEnumerator);
            if (!isConform)
            {
                _debugMessage = string.Format("{0}{1} 轉換失敗:表格與資料結構({2})內容不符\n", _debugMessage, dataConvertInfo.FileName, dataConvertInfo.ClassType);
                ReadExcelFileEnd(null, out jsonString, out debugString);
                return ReadExcelToJsonStringError.TABLE_TYPE_IS_NOT_CONFORM;
            }
            #endregion
            #region 抓取資料
            List<object> allData = new List<object>();

            bool hasEOR = false;

            List<string> tableRowData = _excelToTable.GetNextRow();
            while (tableRowData != null) // 還有資料
            {
                if (_excelToTable.CheckEndOfTable(tableRowData))
                { // 有結尾符號,正常結束
                    hasEOR = true;
                    break;
                }
                if (CheckEmptyRow(tableRowData))
                {
                    ReadExcelFileEnd(null, out jsonString, out debugString);
                    return ReadExcelToJsonStringError.HAS_EMPTY_ROW;
                }
                object obj = Activator.CreateInstance(dataConvertInfo.ClassType);
                List<string>.Enumerator rowDataEnumerator = tableRowData.GetEnumerator();
                ReadExcelToJsonStringError error = GetObjectTypeDataFromExcel(dataConvertInfo.ClassType, ref obj, ref rowDataEnumerator);
                if (error != ReadExcelToJsonStringError.NONE)
                {
                    ReadExcelFileEnd(null, out jsonString, out debugString);
                    return error;
                }
                allData.Add(obj);
                // 取得下一行資料
                tableRowData = _excelToTable.GetNextRow();
            }

            if (!hasEOR)
            {
                ReadExcelFileEnd(null, out jsonString, out debugString);
                return ReadExcelToJsonStringError.CANT_FIND_END_OF_ROW_TOKEN;
            }
            #endregion
            ReadExcelFileEnd(allData, out jsonString, out debugString);
            return ReadExcelToJsonStringError.NONE;
        }
コード例 #3
0
ファイル: Class1.cs プロジェクト: HEIENTAI/SoulOfSword
 public void TestReadStringArray()
 {
     string jsonString = string.Empty;
     string debugString = string.Empty;
     EnumClassValue test = new EnumClassValue(typeof(TestStringArray), "EventData_TestStringArray");
     ReadExcelToJsonStringError error = _excelToJsonString.ReadExcelFile(exceDirectorylPath, test, NeedReadSite.CLIENT, out jsonString, out debugString);
     Assert.AreEqual(ReadExcelToJsonStringError.NONE, error);
 }
コード例 #4
0
    // 得處理一下非同步狀況處理
    IEnumerator Load(int tag, EnumClassValue loadAttr)
    {
        string filePath = GlobalConst.DIR_DATA_JSON + loadAttr.FileName + GlobalConst.EXT_JSONDATA;
        string encodingStr = string.Empty;
        if (filePath.Contains("://"))
        {
            WWW www = new WWW(filePath);
            yield return www;
            encodingStr = www.text;
        }
        else
        {
            encodingStr = File.ReadAllText(filePath);
        }
        try
        {
            CommonFunction.DebugMsgFormat("讀取 {0} 的 Data", (GlobalConst.DataLoadTag)tag);
            object refObj = Activator.CreateInstance(typeof(List<>).MakeGenericType(loadAttr.DataType));
            bool isSuccess = DeserializeObject(encodingStr, ref refObj);
            if (isSuccess)
            {
                _allDataList[(GlobalConst.DataLoadTag)tag] = refObj as IList;
                DataState[tag] = ReadDataState.HaveLoad;
                // TODO: 讀取事件資料完成用觀察者?
                if (tag == (int)GlobalConst.DataLoadTag.Event)
                {
                    GameMain.Instance.GameEventManager.Initialize();
                }
                CommonFunction.DebugMsgFormat("{0}讀取成功", (GlobalConst.DataLoadTag)tag);
            }
            else
            {
                DataState[tag] = ReadDataState.ReadError;
                CommonFunction.DebugMsgFormat("{0}讀取失敗", (GlobalConst.DataLoadTag)tag);
            }

        }
        catch (Exception e)
        {
            CommonFunction.DebugMsgFormat("EventData Read Error:\n");
            CommonFunction.DebugMsgFormat("StackTrace:\n{0}\n", e.StackTrace);
            CommonFunction.DebugMsgFormat("Msg:\n{0}\n", e.Message);
            DataState[tag] = ReadDataState.ReadError;
        }
    }