protected List<string> PrintTable(List<string> ColumnNames, params List<string>[] columns)
{
int[] lenghts = new int[ColumnNames.Count];
for (int i = 0; i < ColumnNames.Count; i++) {
lenghts[i] = columns[i].Max(c => c.Length);
if (lenghts[i] < ColumnNames[i].Length) {
lenghts[i] = ColumnNames[i].Length;
}
lenghts[i] = lenghts[i] + 2;
}
List<string> output = new List<string>();
StringBuilder recordBuilder = new StringBuilder(" ");
for (int columnName = 0; columnName < ColumnNames.Count; columnName++) {
string value = ColumnNames[columnName];
recordBuilder.Append(value);
int spaceleft = lenghts[columnName] - value.Length;
while (spaceleft > 0) {
recordBuilder.Append(" ");
spaceleft--;
}
}
output.Add(recordBuilder.ToString());
recordBuilder = new StringBuilder("");
for (int i = 0; i < lenghts.Sum(); i++) {
recordBuilder.Append("-");
}
output.Add(recordBuilder.ToString());
for (int record = 0; record < columns[0].Count; record++) {
recordBuilder = new StringBuilder(" ");
for (int column = 0; column < columns.Length; column++) {
string value = columns[column][record];
recordBuilder.Append(value);
int spaceleft = lenghts[column] - value.Length;
while (spaceleft > 0) {
recordBuilder.Append(" ");
spaceleft--;
}
}
output.Add(recordBuilder.ToString());
}
return output;
}