Довольно распечатать таблицу в C ++ - PullRequest
10 голосов
/ 17 декабря 2010

Я ищу библиотеку, похожую на prettytable, но в C ++

http://code.google.com/p/prettytable/

Я знаю, как создать его самостоятельно, используя printf или iostream. Тем не менее, я хотел бы знать, есть ли библиотека для этого.

Меня интересует только запись этой таблицы ASCII в консоль.

Предпочтительно что-то вроде:

std::vector<std::string> headers;
headers.push_back("My Awesome Header 1");
headers.push_back("My Awesome Header 2");
headers.push_back("My Awesome Header 3");


PrettyTablePrinter ptp;
ptp.SetHeaders(headers);
// Set some other options here
ptp.AddRow(data[0]);
ptp.AddRow(data[1]);
ptp.AddRow(data[2]);

ptp.Print(&std::cout);

Ответы [ 7 ]

16 голосов
/ 18 апреля 2011

Поскольку я не нашел хорошего решения C ++, я написал одно для вас всех

https://github.com/dattanchu/bprinter/wiki

4 голосов
/ 29 мая 2018

Я не был удовлетворен ни одним из тех, что нашел в Интернете, поэтому я написал свой собственный: https://github.com/friedmud/variadic_table

В нем используются шаблоны с переменными значениями, чтобы каждый столбец содержал различный тип. Также требуется только C ++ 11.

VariadicTable<std::string, double, int, std::string> vt({"Name", "Weight", "Age", "Brother"});

vt.addRow({"Cody", 180.2, 40, "John"});
vt.addRow({"David", 175.3, 38, "Andrew"});
vt.addRow({"Robert", 140.3, 27, "Fande"});

vt.print();

Будет выведено:

--------------------------------------
| Name |  Weight  |    Age   |Brother|
--------------------------------------
|Cody  |     180.2|        40|John   |
|David |     175.3|        38|Andrew |
|Robert|     140.3|        27|Fande  |
--------------------------------------

Это активно используется в большом программном проекте - поэтому он будет поддерживаться и развиваться с течением времени. Не стесняйтесь задавать вопросы / PR

4 голосов
/ 17 декабря 2010

Хотя это не совсем то, что вам нужно, Boost.Spirit содержит библиотеку (называемую Карма), которую можно использовать для создания таких выходных данных довольно легко.Документы здесь .

3 голосов
/ 17 декабря 2010

Насколько мне известно, у вас есть три основных варианта:

  • "C way" с использованием printf со спецификаторами ширины
  • «C ++ путь» через использование потоковых манипуляторов (в частности std::setw и std::setfill)
  • Промежуточный способ с использованием Boost.Format , который позволяет вам использовать форматеры стиля printf с потоками.

Я не знаю ни одной библиотеки, которая могла бы помочь вам в "дизайне таблиц" подробнеечем это.

1 голос
/ 17 декабря 2010

Довольно просто написать html для создания таблиц в C ++, для этого вам не нужна библиотека. С другой стороны, если вы хотите вывод таблицы на консоль, это можно сделать, но это не так просто, особенно если вам нужно выполнить выравнивание по вертикали, разрыв строки и т. Д.

0 голосов
/ 17 декабря 2010

Вы можете достичь этого, используя библиотеку ncurses .Его библиотека C.

0 голосов
/ 17 декабря 2010

Наиболее общий способ форматирования любого вывода из всех, на самом деле only способ сделать это на языке C ++ - это манипуляторы ввода / вывода.

...