Tabulate - C++表格格式化库介绍与使用

发布于:2025-06-15 ⋅ 阅读:(13) ⋅ 点赞:(0)

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;
}

注意事项

  1. Tabulate 主要用于终端显示,不适合生成HTML或其它格式的表格
  2. 对于非常大的表格,性能可能不是最优的
  3. 某些复杂格式在窄终端中可能显示不正常

Tabulate 是一个功能强大且易于使用的库,特别适合需要在命令行界面中展示结构化数据的C++应用程序。它的API设计直观,支持丰富的格式化选项,可以创建出专业美观的表格输出。


资料

Easily Create Tables in Terminal with C++


网站公告

今日签到

点亮在社区的每一天
去签到