Exemple #1
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());
    }