文章目录
Tabulate - C++表格格式化库介绍与使用
Tabulate 是一个用于在终端中创建美观表格的现代C++库。它允许你以简单直观的方式创建和格式化表格,支持跨平台使用(Windows/Linux/macOS)。
主要特性
- 简单易用的API
- 支持多行单元格内容
- 文本对齐(左、中、右)
- 边框样式自定义
- 单元格合并
- 颜色和文本样式
- 支持UTF-8字符
- 无外部依赖
安装方法
使用vcpkg安装
vcpkg install tabulate
使用CMake集成
find_package(tabulate CONFIG REQUIRED)
target_link_libraries(your_target PRIVATE tabulate::tabulate)
直接包含头文件
Tabulate是header-only的,可以直接下载头文件使用。
基本使用示例
#include <tabulate/table.hpp>
using namespace tabulate;
int main() {
Table table;
// 添加表头
table.add_row({"ID", "Name", "Age", "Salary"});
// 添加数据行
table.add_row({"1", "John Doe", "30", "$85,000"});
table.add_row({"2", "Jane Smith", "28", "$92,500"});
table.add_row({"3", "Bob Johnson", "35", "$78,300"});
// 设置表格格式
table.format()
.font_style({FontStyle::bold}) // 表头加粗
.border_top("=")
.border_bottom("=")
.border_left("|")
.border_right("|")
.corner("+");
// 设置列格式
table.column(0).format().width(5); // ID列宽度
table.column(1).format().width(15); // Name列宽度
table.column(2).format().width(8).font_align(FontAlign::center); // Age列居中
table.column(3).format().width(10).font_align(FontAlign::right); // Salary列右对齐
// 打印表格
std::cout << table << std::endl;
return 0;
}
高级功能
单元格合并
Table movies;
movies.add_row({"Movie", "Rating", "Year"});
movies.add_row({"The Shawshank Redemption", "9.3", "1994"});
movies.add_row({"The Godfather", "9.2", "1972"});
// 合并第一行的前两列
movies[0][0].format().column_span(2);
颜色和样式
Table colorful_table;
colorful_table.add_row({"Red", "Green", "Blue"});
// 设置单元格颜色
colorful_table[0][0].format()
.font_color(Color::red)
.font_style({FontStyle::bold, FontStyle::underline});
colorful_table[0][1].format()
.font_background_color(Color::green)
.font_color(Color::white);
colorful_table[0][2].format()
.font_color(Color::blue)
.font_style({FontStyle::italic});
自定义边框样式
Table custom_border;
custom_border.add_row({"A", "B", "C"});
custom_border.add_row({"1", "2", "3"});
custom_border.format()
.border_top("-")
.border_bottom("-")
.border_left("|")
.border_right("|")
.corner("+");
从Markdown创建表格
auto table = Table::from_markdown("| Name | Age |\n|------|-----|\n| John | 25 |\n| Jane | 30 |");
实际应用示例
数据库查询结果显示
void display_query_results(const std::vector<Employee>& employees) {
Table results;
// 添加表头
results.add_row({"ID", "Name", "Department", "Hire Date", "Salary"});
// 添加数据
for (const auto& emp : employees) {
results.add_row({
std::to_string(emp.id),
emp.name,
emp.department,
emp.hire_date,
"$" + std::to_string(emp.salary)
});
}
// 格式化
results.format()
.font_style({FontStyle::bold})
.border_top("-")
.border_bottom("-")
.border_left("|")
.border_right("|")
.corner("+");
// 列对齐和宽度
results.column(0).format().width(5).font_align(FontAlign::center);
results.column(3).format().width(12);
results.column(4).format().width(10).font_align(FontAlign::right);
std::cout << results << std::endl;
}
注意事项
- Tabulate 主要用于终端显示,不适合生成HTML或其它格式的表格
- 对于非常大的表格,性能可能不是最优的
- 某些复杂格式在窄终端中可能显示不正常
Tabulate 是一个功能强大且易于使用的库,特别适合需要在命令行界面中展示结构化数据的C++应用程序。它的API设计直观,支持丰富的格式化选项,可以创建出专业美观的表格输出。