//生成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()); }