如何将格式正确的表格打印到控制台?
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
【讨论】:
好奇:为什么不用: <10 | : <10 ...
而不是0: <10 | 1: <10 ...
?我刚刚测试了前者,它似乎做同样的事情。【参考方案2】:
或者您可以使用专门的 crate 来格式化表格,例如 prettytable-rs
【讨论】:
对于现在看到这条评论的人来说,prettytable 似乎不再维护了,不过有tabled。以上是关于如何将格式正确的表格打印到控制台?的主要内容,如果未能解决你的问题,请参考以下文章