Esempio n. 1
0
 //生成data文件
 void CreateDataFile()
 {
     if (mDataDirectory.IsEmptyString())
     {
         return;
     }
     using (var writer = new TableWriter()) {
         writer.WriteInt32(mDatas.Count);            //数据数量
         writer.WriteString(LayoutMD5);              //文件结构MD5
         writer.WriteInt32(mFields.Count);           //字段数量
         foreach (var field in mFields)
         {
             if (field.IsBasic)
             {
                 writer.WriteInt8(0);
                 writer.WriteInt8((sbyte)field.BasicType.Index);
             }
             else
             {
                 writer.WriteInt8(1);
                 writer.WriteString(field.Type);
             }
             writer.WriteBool(field.IsArray);
         }
         writer.WriteInt32(0);                       //自定义类数量
         var keys = new List <string>();
         foreach (var data in mDatas)
         {
             if (keys.Contains(data.Key))
             {
                 throw new Exception($"ID有重复项[{data.Key}], 行:[{data.RowNumber}]");
             }
             keys.Add(data.Key);
             for (var i = 0; i < mFields.Count; ++i)
             {
                 var field = mFields[i];
                 try {
                     field.Write(writer, data.Values[i]);
                 } catch (Exception e) {
                     throw new Exception($"行:{data.RowNumber} 列:{field.Name}  {e.Message}");
                 }
             }
         }
         FileUtil.CreateFile($"{mName}.{mSuffix}", writer.ToArray(), mDataDirectory.Split(ScorpioConversion.Util.Separator));
     }
 }
Esempio n. 2
0
    //生成data文件数据
    private void Transform_impl()
    {
        int         iColums = mMaxColumn;           //数据列数
        int         iRows   = mMaxRow;              //数据行数
        TableWriter writer  = new TableWriter();

        writer.WriteInt32(0);                       //写入行数(最后计算出有效数据然后写入)
        writer.WriteString(GetClassMD5Code());      //写入文件MD5码
        WriteFields(writer, mFields);               //写入表结构
        writer.WriteInt32(mUsedCustoms.Count);      //写入用到的自定义类数量
        foreach (var key in mUsedCustoms)
        {
            writer.WriteString(key);
            WriteFields(writer, mCustoms[key]);
        }
        List <string> keys  = new List <string>();
        int           count = 0;

        for (int i = START_ROW; i < iRows; ++i)
        {
            string ID = "";
            for (int j = 0; j < iColums; ++j)
            {
                string value = mDataTable[i][j];
                var    field = mFields[j];
                try {
                    if (string.IsNullOrEmpty(value))
                    {
                        value = string.IsNullOrEmpty(field.Default) ? Util.EmptyString : field.Default;    //数据为空设置为默认值
                    }
                    if (j == 0)
                    {
                        if (keys.Contains(value))
                        {
                            throw new Exception(string.Format("ID有重复项[{0}]", value));
                        }
                        else if (Util.IsEmptyString(value))
                        {
                            throw new Exception("ID字段不能为空");
                        }
                        ID = value;
                        keys.Add(value);
                    }
                    if (ExecuteField != null)
                    {
                        ExecuteField(field, ID, ref value);
                    }
                    var basic = BasicUtil.GetType(field.Type);
                    if (basic != null || field.Enum)
                    {
                        if (field.Array)
                        {
                            WriteField(writer, Util.ReadValue(mEnums, mDataTable[i].RowNumber, Util.GetLineName(j), value, false, true), field);
                        }
                        else
                        {
                            WriteField(writer, value, field);
                        }
                    }
                    else
                    {
                        WriteCustom(writer, Util.ReadValue(mEnums, mDataTable[i].RowNumber, Util.GetLineName(j), value, true, field.Array), mCustoms[field.Type], field.Array);
                    }
                } catch (System.Exception ex) {
                    throw new SystemException(string.Format("[{0}]行[{1}]列出错 数据内容为[{2}] : {3}", mDataTable[i].RowNumber, Util.GetLineName(j), value, ex.ToString()));
                }
            }
            count++;
        }
        writer.Seek(0);
        writer.WriteInt32(count);
        Create_impl(writer.ToArray());
    }