/// <summary> /// 将相同列合并到一个表格中,标题以不同表名称命名。 /// </summary> /// <param name="indexes"></param> /// <param name="colNames"></param> /// <param name="tableNamePostfix"></param> /// <returns></returns> public ObjectTableManager GetSameColAssembledTableManager(List <object> indexes, List <string> colNames, string tableNamePostfix = "") { var indexColName = this.GetIndexColName(); ObjectTableManager newManger = new ObjectTableManager(this.OutputDirectory); //建立表格 foreach (var oldColName in colNames) { if (indexColName.Equals(oldColName, StringComparison.CurrentCultureIgnoreCase)) { continue; } var newTableName = oldColName; if (!String.IsNullOrWhiteSpace(tableNamePostfix)) { newTableName = TableNameHelper.BuildName(oldColName, tableNamePostfix, true); } newManger.AddTable(newTableName); } //填充数据 foreach (var indexVal in indexes) //逐历元 { foreach (var oldColName in colNames) //逐新表 { if (indexColName.Equals(oldColName, StringComparison.CurrentCultureIgnoreCase)) { continue; } var newTable = newManger.Get(oldColName); newTable.NewRow(); newTable.AddItem(indexColName, indexVal); foreach (var oldTableName in this.Keys) // 逐新表列, 逐老表 { var oldTable = this[oldTableName]; if (!oldTable.ParamNames.Contains(oldColName)) { continue; } var val = oldTable[indexVal, oldColName]; if (val != null) { var colName = TableNameHelper.ParseName(oldTableName); newTable.AddItem(colName, val); } } newTable.EndRow(); } } return(newManger); }
/// <summary> /// 通过减去指定小数后,四舍五入取整。 /// </summary> /// <param name="fractionTables"></param> /// <param name="tableNamePostfix"></param> /// <param name="isReplacePrevPosfix"></param> /// <returns></returns> public ObjectTableManager GetIntByMinusAndRound(ObjectTableManager fractionTables, string tableNamePostfix = "Int", bool isReplacePrevPosfix = false) { var dic = new ConcurrentDictionary <string, ObjectTableStorage>(); Parallel.ForEach(this, tableA => { var tableB = fractionTables.Get(tableA.Name); if (tableB == null) { return; } var table = tableA.GetIntByMinusAndRound(tableB, tableNamePostfix, isReplacePrevPosfix); dic.TryAdd(table.Name, table); }); var mwTables = new ObjectTableManager(dic, this.OutputBufferCount, OutputDirectory); return(mwTables); }
/// <summary> /// 追加列,返回新表 /// </summary> /// <param name="tables"></param> /// <param name="appdenColPostfix"></param> /// <param name="tableNamePostfix"></param> /// <param name="isReplacePrevPosfix"></param> /// <returns></returns> public ObjectTableManager GetAppendColTables(ObjectTableManager tables, string appdenColPostfix, string tableNamePostfix = "Combined", bool isReplacePrevPosfix = false) { var newTableManager = new ObjectTableManager(this.OutputDirectory, this.OutputBufferCount, this.Name + "_append_" + tables.Name + "_" + appdenColPostfix); int i = -1; foreach (var tableA in this) //便利PPP星间单差,一次一颗卫星 { i++; var tableB = tables.Get(tableA.Name); if (tableB == null) { continue; } var newTable = tableA.GetAppendColTable(tableB, appdenColPostfix, tableNamePostfix, isReplacePrevPosfix); newTableManager.Add(newTable); } return(newTableManager); }
/// <summary> /// 对两个表相同位置的数据进行计算,并返回新表。 /// </summary> /// <param name="tableAManager"></param> /// <param name="tableBManager"></param> /// <param name="Func"></param> /// <param name="postfixOfTableName"></param> /// <returns></returns> static public ObjectTableManager HandleSameNumeralCellValue(ObjectTableManager tableAManager, ObjectTableManager tableBManager, Func <double, double, double> Func, string postfixOfTableName) { var dic = new ConcurrentDictionary <string, ObjectTableStorage>(); Parallel.ForEach <ObjectTableStorage>(tableAManager, tableA => { var tableB = tableBManager.Get(tableA.Name); if (tableB != null) { var newTableName = tableA.Name; if (!String.IsNullOrWhiteSpace(postfixOfTableName)) { newTableName += "_" + postfixOfTableName; } var newTable = tableA.HandleSameNumeralCellValue(tableB, Func, newTableName); dic.TryAdd(newTable.Name, newTable); } }); var mwTables = new ObjectTableManager(dic, tableAManager.OutputBufferCount, tableAManager.OutputDirectory); return(mwTables); }
/// <summary> /// 同步表,删除多余列 /// </summary> /// <param name="tableObjectManager"></param> public void SynchronizeTable(ObjectTableManager tableObjectManager) { List <string> toremoveTable = new List <string>(); foreach (var item in this) { var table = (tableObjectManager.Get(item.Name)); if (table != null) { item.SynchronizeCol(table); } else { toremoveTable.Add(item.Name); } } if (toremoveTable.Count > 0) { this.Remove(toremoveTable); log.Debug(this.Name + " 与 " + tableObjectManager.Name + " 同步移除了 " + toremoveTable.Count + " 个表"); } }