У меня интересный вопрос. Представьте, что у меня много данных, меняющихся с очень быстрыми интервалами. Я хочу отобразить эти данные в виде таблицы в консольном приложении. например:
-------------------------------------------------------------------------
| Column 1 | Column 2 | Column 3 | Column 4 |
-------------------------------------------------------------------------
| | | | |
| | | | |
| | | | |
-------------------------------------------------------------------------
Как ускорить работу и как исправить ширину столбцов? Я знаю, как это сделать в java, но не знаю, как это делается на C #.
Ответы:
Вы можете сделать что-то вроде следующего:
источник
Используйте String.Format со значениями выравнивания.
Например:
Чтобы создать одну отформатированную строку.
источник
-
для контента с выравниванием по левому{0,-5}
Изменить: благодаря @superlogical теперь вы можете найти и улучшить следующий код в github !
Я написал этот класс на основе некоторых здесь идей. Ширина столбцов оптимальна, он может обрабатывать массивы объектов с помощью этого простого API:
Вот класс:
Изменить: я добавил небольшое улучшение - если вы хотите, чтобы заголовки столбцов были именем свойства, добавьте к нему следующий метод
TableParser
(обратите внимание, что он будет немного медленнее из-за отражения):источник
arrValues[rowIndex, colIndex] = valueSelectors[colIndex].Invoke(values[rowIndex - 1]).ToString();
чтобыvar val = valueSelectors[colIndex].Invoke(values[rowIndex - 1]); arrValues[rowIndex, colIndex] = val == null ? "null" : val.ToString();
он показывал null.Существует несколько библиотек с открытым исходным кодом, которые позволяют форматировать консольную таблицу, от простого (например, примеры кода в ответах здесь) до более сложного.
КонсольТаблица
Судя по статистике NuGet, самая популярная библиотека для форматирования таблиц - ConsoleTable. . Таблицы построены следующим образом (из файла readme):
Таблицы можно форматировать с использованием одного из предопределенных стилей. Это будет выглядеть так:
Эта библиотека ожидает однострочные ячейки без форматирования.
На основе ConsoleTable есть несколько библиотек с немного расширенными наборами функций, например, с большим количеством стилей линий.
CsConsoleFormat
Если вам нужно более сложное форматирование, вы можете использовать CsConsoleFormat . † Вот таблица, созданная из списка процессов (из примера проекта):
Конечный результат будет выглядеть так:
Он поддерживает любые типы строк таблицы (несколько включенных и настраиваемых), многострочные ячейки с переносом слов, цвета, рост столбцов в зависимости от содержимого или процента, выравнивание текста и т. Д.
† CsConsoleFormat был разработан мной.
источник
TextWrap = TextWrapping.NoWrap
отличие от примера выше).new Cell(text) { Color = text == "true" ? Green : Red }
. Если у вас много таблиц с похожими правилами форматирования, вы можете поместить этот код в какую-либо функцию, будь то для ячейки, строки или всей таблицы.источник
StreamWriter
наTextWriter
. 2. ЗаменитьPrintToConsole
код с:PrintToStream(arrValues, Console.Out);
3. ??? 4. ПРИБЫЛЬ!Мне нужны столбцы переменной ширины, и я не особо заботился о прямоугольных символах. Кроме того, мне нужно было напечатать дополнительную информацию для каждой строки.
Так что на случай, если это понадобится кому-то еще, я сэкономлю вам несколько минут:
Вывод:
источник
Это улучшение предыдущего ответа. Он добавляет поддержку значений различной длины и строк с различным количеством ячеек. Например:
Вот код:
источник
Если это кому-то поможет, это простой класс, который я написал для своих нужд. Вы можете легко изменить его под свои нужды.
Пример использования:
Вывод:
источник
У меня есть проект на GitHub, который вы можете использовать
https://github.com/BrunoVT1992/ConsoleTable
Вы можете использовать это так:
Это даст такой результат:
источник
Используйте библиотеку MarkDownLog (вы можете найти ее на NuGet)
вы можете просто использовать расширение ToMarkdownTable () для любой коллекции, оно выполняет все форматирование за вас.
Результат выглядит примерно так:
источник
источник
С VisualBasic.net это проще!
Если вы хотите, чтобы пользователь мог вручную вводить данные в таблицу:
Должно получиться так:
источник