public static StringTable ExpandIntegerColumnsUseProcessDefinition(StringTable inStringTable, string[] columnNames, ProcessDefinition processDefinition) { bool[] columnsToExpand = FindColumns(inStringTable.IndependentHeaders.ToList(), columnNames); int countAddedColumns = 0; for (int inColumnIndex = 0; inColumnIndex < processDefinition.ExpandColumnsPointers.Pointers.Count; inColumnIndex++) { ExpandColumnPointers expandColumnPointers = processDefinition.ExpandColumnsPointers.Pointers[inColumnIndex]; if (expandColumnPointers.Pointers.Count > 0) { countAddedColumns += expandColumnPointers.Pointers.Count - 1; } } StringTable outStringTable = new StringTable(); int totalRows = inStringTable.Independents.GetUpperBound(0) + 1; int totalInColumns = inStringTable.Independents.GetUpperBound(1) + 1; int totalOutColumns = totalInColumns + countAddedColumns; outStringTable.IndependentHeaders = new string[totalOutColumns]; outStringTable.Independents = new string[totalRows, totalOutColumns]; int outColumnIndex = 0; int countExpandedInColumns = 0; for (int inColumnIndex = 0; inColumnIndex < columnsToExpand.Length; inColumnIndex++) { string[] inColumn = GetColumn(inStringTable.Independents, inColumnIndex); if (columnsToExpand[inColumnIndex] == false) { outStringTable.IndependentHeaders[outColumnIndex] = inStringTable.IndependentHeaders[inColumnIndex]; PutColumn(outStringTable.Independents, inColumn, outColumnIndex); outColumnIndex++; } else { ExpandColumnPointers expandColumnPointers = processDefinition.ExpandColumnsPointers.Pointers[countExpandedInColumns]; int totalNewColumns = expandColumnPointers.Pointers.Count; for (int newColumnIndex = 0; newColumnIndex < totalNewColumns; newColumnIndex++) { ExpandColumnPointer expandColumnPointer = expandColumnPointers.Pointers[newColumnIndex]; outStringTable.IndependentHeaders[outColumnIndex] = inStringTable.IndependentHeaders[inColumnIndex] + "-" + newColumnIndex.ToString().Trim(); for (int rowIndex = 0; rowIndex < totalRows; rowIndex++) { if (inStringTable.Independents[rowIndex, inColumnIndex] == expandColumnPointer.CategoryName & newColumnIndex == Convert.ToInt32(expandColumnPointer.NewColumnIndex)) { outStringTable.Independents[rowIndex, outColumnIndex] = "1"; } else { outStringTable.Independents[rowIndex, outColumnIndex] = "0"; } } outColumnIndex++; } countExpandedInColumns++; } } return(outStringTable); }
public static StringTable ExpandIntegerColumnsUpdateProcessDefinition(StringTable inStringTable, string[] columnNames, ProcessDefinition processDefinition) { processDefinition.ExpandColumnsPointers = new ExpandColumnsPointers(); bool[] columnsToExpand = FindColumns(inStringTable.IndependentHeaders.ToList(), columnNames); int countAddedColumns = 0; for (int inColumnIndex = 0; inColumnIndex < columnsToExpand.Length; inColumnIndex++) { if (columnsToExpand[inColumnIndex] == true) { string[] column = GetColumn(inStringTable.Independents, inColumnIndex); countAddedColumns += column.Distinct().ToList().Count - 1; } } StringTable outStringTable = new StringTable(); outStringTable.DependantHeader = inStringTable.DependantHeader; outStringTable.Dependants = inStringTable.Dependants; int totalRows = inStringTable.Dependants.Length; int totalInColumns = inStringTable.Independents.GetUpperBound(1) + 1; int totalOutColumns = totalInColumns + countAddedColumns; outStringTable.IndependentHeaders = new string[totalOutColumns]; outStringTable.Independents = new string[totalRows, totalOutColumns]; int outColumnIndex = 0; for (int inColumnIndex = 0; inColumnIndex < columnsToExpand.Length; inColumnIndex++) { ExpandColumnPointers expandColumnPointers = new ExpandColumnPointers(); string[] inColumn = GetColumn(inStringTable.Independents, inColumnIndex); if (columnsToExpand[inColumnIndex] == false) { outStringTable.IndependentHeaders[outColumnIndex] = inStringTable.IndependentHeaders[inColumnIndex]; PutColumn(outStringTable.Independents, inColumn, outColumnIndex); outColumnIndex++; } else { List <string> distinctCategories = inColumn.Distinct().ToList(); int totalNewColumns = distinctCategories.Count; for (int newColumnIndex = 0; newColumnIndex < totalNewColumns; newColumnIndex++) { ExpandColumnPointer expandColumnPointer = new ExpandColumnPointer(); expandColumnPointer.NewColumnIndex = newColumnIndex; expandColumnPointer.CategoryName = distinctCategories[newColumnIndex]; outStringTable.IndependentHeaders[outColumnIndex] = inStringTable.IndependentHeaders[inColumnIndex] + "-" + newColumnIndex.ToString().Trim(); for (int rowIndex = 0; rowIndex < totalRows; rowIndex++) { if (newColumnIndex == Convert.ToInt32(inColumn[rowIndex])) { outStringTable.Independents[rowIndex, outColumnIndex] = "1"; } else { outStringTable.Independents[rowIndex, outColumnIndex] = "0"; } } outColumnIndex++; expandColumnPointers.Pointers.Add(expandColumnPointer); } } if (expandColumnPointers.Pointers.Count > 0) { processDefinition.ExpandColumnsPointers.Pointers.Add(expandColumnPointers); } } return(outStringTable); }