如何将格式正确的表格打印到控制台?

Posted

技术标签:

【中文标题】如何将格式正确的表格打印到控制台?【英文标题】:How to print well-formatted tables to the console? 【发布时间】:2015-08-03 10:50:47 【问题描述】:

我有一个程序可以打印出应该打印成看起来像表格的格式的数据。但是,当数字长于 2 时,表格会中断。我知道 std::fmt 中的 width 参数,但我无法理解它。

当前输出:

---------------------------------------
| total | blanks: | comments: | code: |
---------------------------------------
|  0   |    0    |    0     |    0  |
|  77   |    0    |    3     |    74  |
|  112   |    0    |    6     |    106  |
|  178   |    0    |    6     |    172  |
|  218   |    0    |    7     |    211  |
|  289   |    0    |    8     |    281  |
|  380   |    0    |    9     |    371  |
|  460   |    0    |    10     |    450  |
|  535   |    0    |    11     |    524  |
|  611   |    0    |    12     |    599  |
|  692   |    0    |    14     |    678  |
|  772   |    0    |    17     |    755  |
|  873   |    0    |    18     |    855  |
|  963   |    0    |    19     |    944  |
|  1390   |    0    |    19     |    1371  |
|  1808   |    0    |    19     |    1789  |
|  2011   |    0    |    19     |    1992  |
|  2259   |    0    |    19     |    2240  |
|  2294   |    0    |    19     |    2275  |
|  2349   |    0    |    19     |    2330  |
|  2376   |    0    |    19     |    2357  |
|  2430   |    0    |    19     |    2411  |
|  2451   |    0    |    19     |    2432  |
|  2515   |    13    |    19     |    2483  |
|  2559   |    13    |    19     |    2527  |

【问题讨论】:

尝试使用 TAB 而不是 SPACE。应该可以很好地处理少于 8 个字符的数字或字符串。 如果你确实使用制表符,那么我写了一个板条箱来做弹性制表位,它会对齐列而不考虑它们的长度:github.com/BurntSushi/tabwriter 【参考方案1】:

语法类似于 Python 中的 str.format 语法。这个:

fn main() 
    println!(
        "0: <10 | 1: <10 | 2: <10 | 3: <10",
        "total", "blanks", "comments", "code"
    );
    println!("0: <10 | 1: <10 | 2: <10 | 3: <10", 0, 0, 0, 0);
    println!("0: <10 | 1: <10 | 2: <10 | 3: <10", 77, 0, 3, 74);
    println!("0: <10 | 1: <10 | 2: <10 | 3: <10", 112, 0, 6, 106);
    println!(
        "0: <10 | 1: <10 | 2: <10 | 3: <10",
        460, 0, 10, 1371
    );

(playground)

产生以下输出:

total      | blanks     | comments   | code      
0          | 0          | 0          | 0         
77         | 0          | 3          | 74        
112        | 0          | 6          | 106       
460        | 0          | 10         | 1371  

【讨论】:

好奇:为什么不用: &lt;10 | : &lt;10 ... 而不是0: &lt;10 | 1: &lt;10 ...?我刚刚测试了前者,它似乎做同样的事情。【参考方案2】:

或者您可以使用专门的 crate 来格式化表格,例如 prettytable-rs

【讨论】:

对于现在看到这条评论的人来说,prettytable 似乎不再维护了,不过有tabled。

以上是关于如何将格式正确的表格打印到控制台?的主要内容,如果未能解决你的问题,请参考以下文章

dump方法打印表格

如何使用 innerHTML 将对象值正确打印到 DIV?

如何将表数据从数据库打印到 Java 控制台? [关闭]

如何将json数据格式化输出到控制台

将扩展的 Ascii“表格”代码(例如 ─、┬)从 Php 脚本打印到控制台时出现问题

如何将变量一起添加到您控制分离的新变量中