Существует несколько пакетов NuGet, которые могут помочь с форматированием.В некоторых случаях возможностей string.Format
достаточно, но может потребоваться автоматическое изменение размера столбцов на основе содержимого, по крайней мере.
ConsoleTableExt
ConsoleTableExt являетсяпростая библиотека, которая позволяет форматировать таблицы, включая таблицы без линий сетки.(Более популярный пакет ConsoleTables , похоже, не поддерживает таблицы без полей.) Вот пример форматирования списка объектов с размерами столбцов в зависимости от их содержимого:
ConsoleTableBuilder
.From(orders
.Select(o => new object[] {
o.CustomerName,
o.Sales,
o.Fee,
o.Value70,
o.Value30
})
.ToList())
.WithColumn(
"Customer",
"Sales",
"Fee",
"70% value",
"30% value")
.WithFormat(ConsoleTableBuilderFormat.Minimal)
.WithOptions(new ConsoleTableBuilderOption { DividerString = "" })
.ExportAndWriteLine();
CsConsoleFormat
Если вам нужно больше возможностей, чем это, любое консольное форматирование может быть достигнуто с помощью CsConsoleFormat . † Например, вот форматирование списка объектов в виде сетки с фиксированной шириной столбца 10, напримерв других ответах, используя string.Format
:
ConsoleRenderer.RenderDocument(
new Document { Color = ConsoleColor.Gray }
.AddChildren(
new Grid { Stroke = LineThickness.None }
.AddColumns(10, 10, 10, 10, 10)
.AddChildren(
new Div("Customer"),
new Div("Sales"),
new Div("Fee"),
new Div("70% value"),
new Div("30% value"),
orders.Select(o => new object[] {
new Div().AddChildren(o.CustomerName),
new Div().AddChildren(o.Sales),
new Div().AddChildren(o.Fee),
new Div().AddChildren(o.Value70),
new Div().AddChildren(o.Value30)
})
)
));
Это может выглядеть сложнее, чем чистый string.Format
, но теперь его можно настроить.Например:
Если вы хотите автоматически изменять размер столбцов на основе содержимого, замените AddColumns(10, 10, 10, 10, 10)
на AddColumns(-1, -1, -1, -1, -1)
(-1
- это ярлык для GridLength.Auto
, у вас есть большепараметры размера, включая процент ширины окна консоли).
Если вы хотите выровнять числовые столбцы вправо, добавьте { Align = Right }
к инициализатору ячейки.
Если вы хотите покрасить столбец, добавьте { Color = Yellow }
к инициализатору ячейки.
Вы можете изменить стили границ и многое другое.
† CsConsoleFormat был разработан мной.