private HorizonFormat GetColumnFormat(DataTable table, int columnIndex) { HorizonFormat format = new HorizonFormat(); foreach (DataRow row in table.Rows) { string data = Convert.ToString(row[columnIndex]); string[] dataTokens = data.Split('.'); if (dataTokens.Length == 1) { if (format.WholeNumberCount < data.Length) { format.WholeNumberCount = data.Length; } } else { if (format.WholeNumberCount < dataTokens[0].Length) { format.WholeNumberCount = dataTokens[0].Length; } if (format.DecimalPlaceCount < dataTokens[1].Length) { format.DecimalPlaceCount = dataTokens[1].Length; } } } return(format); }
/// <summary> /// For HORIZON, we will output the data right-aligned /// </summary> /// <param name="row"></param> /// <param name="desiredColumns"></param> /// <returns></returns> private String HandleDesiredDataForHorizon(DataRow row, Dictionary <int, HorizonFormat> desiredColumnLengthMappings) { StringBuilder retVal = new StringBuilder(); foreach (int desiredCol in desiredColumnLengthMappings.Keys) { HorizonFormat format = desiredColumnLengthMappings[desiredCol]; var data = Convert.ToString(row[desiredCol]); string[] dataTokens = data.Split('.'); string wholeNumber; string decimalNumber; if (dataTokens.Length == 1) { wholeNumber = data.PadLeft(format.WholeNumberCount, ' '); decimalNumber = string.Empty.PadRight(format.DecimalPlaceCount, '0'); } else { wholeNumber = dataTokens[0].PadLeft(format.WholeNumberCount, ' '); decimalNumber = dataTokens[1].PadRight(format.DecimalPlaceCount, '0'); } if (!string.IsNullOrEmpty(retVal.ToString())) { retVal.Append(" "); } retVal.Append(string.Format("{0}.{1}", wholeNumber, decimalNumber)); } return(retVal.ToString()); }
private Dictionary <int, HorizonFormat> GetDesiredColumnLengthMapping(DataTable table, List <int> desiredColumns) { Dictionary <int, HorizonFormat> retVal = new Dictionary <int, HorizonFormat>(); foreach (int desiredCol in desiredColumns) { HorizonFormat format = GetColumnFormat(table, desiredCol); retVal.Add(desiredCol, format); } return(retVal); }