【问题标题】:Drawing tables in terminal using ANSI box characters使用 ANSI 框字符在终端中绘制表格
【发布时间】:2011-05-28 12:22:48
【问题描述】:

我正在尝试打印一个比纯文本表示形式更令人赏心悦目的表格。基本上我想转换这样的东西:

+-----+--------+
| age | weight |
+-----+--------+
| 10  | 100    |
| 80  | 500    |
+-----+--------+

到这样的事情:

┌─────┬────────┐
| age | weight |
├─────┼────────┤
│ 10  │   100  │
│ 80  │  500   │
└─────┴────────┘

这是我在终端看到的截图:

注意行之间的间隙。我的问题是它们没有正确连接,而其他使用 ANSI 打印的 Unix 工具在终端中看起来很好。例如,树,如果我在终端中运行 tree -A `我得到这个:

注意垂直线是如何连接在一起的。这很有趣,因为当我将树的输出复制并粘贴到我的文本编辑器中并运行我的脚本时,我会得到这样的结果:

显然我遗漏了一些关于在终端中打印 ANSI 字符的信息,并且通过谷歌搜索找不到任何关于它的信息。任何人都可以对这个话题有所了解吗?

【问题讨论】:

    标签: unix terminal tabular


    【解决方案1】:

    您确实应该研究 ncurses 及其变体。有一系列不同的语言绑定,尽管它最初是为 C 编写的。它提供了相当丰富的库套件,用于生成带有窗口、菜单、框边框等的 TUI(文本 UI)。 点击维基百科开始查找其他参考资料。

    【讨论】:

      【解决方案2】:

      我想我应该回答我自己的问题。经过一番研究和朋友老板Linus的帮助,我发现我需要先强制终端进入图形模式,然后打印特殊字符,然后再返回文本模式。切换到图形模式的 ascii 代码是 14,而 15 将返回到文本模式。所以这里是 ruby​​ 中的代码:

      printf("%c\n", 14)
      printf("%c ", 0x6A) # ┘
      printf("%c ", 0x6B) # ┐
      printf("%c ", 0x6C) # ┌
      printf("%c ", 0x6D) # └
      printf("%c ", 0x6E) # ┼ 
      printf("%c ", 0x71) # ─
      printf("%c ", 0x74) # ├
      printf("%c ", 0x75) # ┤
      printf("%c ", 0x76) # ┴
      printf("%c ", 0x77) # ┬
      printf("%c\n", 0x78) # │
      
      
      a = sprintf("%c", 0x6C) + # ┌
      sprintf("%c", 0x71) + # ─
      sprintf("%c", 0x71) + # ─
      sprintf("%c", 0x71) + # ─
      sprintf("%c", 0x71) + # ─
      sprintf("%c", 0x71) + # ─
      sprintf("%c", 0x71) + # ─
      sprintf("%c\n", 0x6B) +  # ┐
      sprintf("%c", 0x78) + # │
      #print("      ")
      "      " + 
      sprintf("%c\n", 0x78) + # │
      sprintf("%c", 0x6D) + # └
      sprintf("%c", 0x71) + # ─
      sprintf("%c", 0x71) + # ─
      sprintf("%c", 0x71) + # ─
      sprintf("%c", 0x71) + # ─
      sprintf("%c", 0x71) + # ─
      sprintf("%c", 0x71) + # ─
      sprintf("%c", 0x6A)  # ┘
      
      puts a
      
      printf("%c\n", 15)
      

      【讨论】:

      • 嗨,我知道它老了,但我在 Mac 终端上遇到了同样的问题。我尝试了 14/15 解决方案,但它对我不起作用。你不知道为什么吗?
      猜你喜欢
      • 1970-01-01
      • 2023-02-02
      • 2016-09-14
      • 2021-02-16
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2020-10-10
      相关资源
      最近更新 更多