如何用纯文本绘制框和表格

如何用纯文本绘制框和表格

在许多纯文本文档中,框绘制字符用于在图形和表格中绘制这些框。以下示例(来自RFC 5766) 如下所示。有没有更好的方法来绘制这个(例如,Unix 命令行工具),除了使用反复试验的方法吗?


示例来自RFC 5766

       +----------------------------+---------------------+
       | TURN client to TURN server | TURN server to peer |
       +----------------------------+---------------------+
       |             UDP            |         UDP         |
       |             TCP            |         UDP         |
       |        TLS over TCP        |         UDP         |
       +----------------------------+---------------------+

这一个也是来自RFC 5766

                                        Peer A
                                        Server-Reflexive    +---------+
                                        Transport Address   |         |
                                        192.0.2.150:32102   |         |
                                            |              /|         |
                          TURN              |            / ^|  Peer A |
    Client's              Server            |           /  ||         |
    Host Transport        Transport         |         //   ||         |
    Address               Address           |       //     |+---------+
   10.1.1.2:49721       192.0.2.15:3478     |+-+  //     Peer A
            |               |               ||N| /       Host Transport
            |   +-+         |               ||A|/        Address
            |   | |         |               v|T|     192.168.100.2:49582
            |   | |         |               /+-+
 +---------+|   | |         |+---------+   /              +---------+
 |         ||   |N|         ||         | //               |         |
 | TURN    |v   | |         v| TURN    |/                 |         |
 | Client  |----|A|----------| Server  |------------------|  Peer B |
 |         |    | |^         |         |^                ^|         |
 |         |    |T||         |         ||                ||         |
 +---------+    | ||         +---------+|                |+---------+
                | ||                    |                |
                | ||                    |                |
                +-+|                    |                |
                   |                    |                |
                   |                    |                |
             Client's                   |            Peer B
             Server-Reflexive    Relayed             Transport
             Transport Address   Transport Address   Address
             192.0.2.1:7000      192.0.2.15:50000     192.0.2.210:49191

                                 Figure 1

答案1

免费ASCIIflow 网站可以让你绘制文本框、文本、线条、箭头、自由线条、擦除、导入、导出,甚至撤消/重做。还需要什么?

这是我使用此工具创作的精彩作品:

+-------------------------------+
|                               |
|  My first ASCII box           |
|                               |
+---------+---------------------+
          |
          |
          |
          | My first ever ASCII arrow
          |
          |
          |
+---------v----------------------+
|                                |
|  My second ASCII box           |
+--------------------------------+

答案2

可以使用 30 年前的工具绘制这样的图景,即图片这是 troff命令套件的一部分。现在 gnu 的groff软件包将包含该pic命令。链接显示了一些典型的 PostScript 输出的图片,但使用nroff或适当的选项,您将获得 ascii-art 版本。请参阅用户手册(pdf)自 1991 年以来作为例子。

您的示例中的表格可能是由同一个命令套件生成的,仅使用tbl它可以从简单列表生成表格。

为一个图形用户界面版本,您可以artist-mode在 emacs 中使用鼠标或键盘绘制方框和箭头线等。请参阅Youtube 视频演示。

答案3

用字符绘制方框或其他形状称为ASCII 艺术(也称 ANSI 或 ISO 艺术)。有许多工具可以帮助创建 ASCII 艺术,例如在线ASCII流以 ASCII 格式呈现图像,例如应用figlet 等有些已经用 JavaScript 实现并且可以在任何操作系统的浏览器中运行。

太阳底下并无新鲜事——微缩字体是书法的一个分支,历史悠久,已使用数百年,使用字母来形成图画,例如下面的日历,其中大部分图像由字母组成。

奥马尔日历,苏富比

答案4

从命令行使用来自 GitHub 的终端表

安装terminal-table

gem install terminal-table

例如:

irb
require 'terminal-table'

rows = []
rows << ['UDP', 'UDP']
rows << ['TCP', 'UDP']
rows << ['TLS over TCP ', 'UDP']
table = Terminal::Table.new :headings => ['TURN client to TURN server', 'TURN server to peer'], :rows => rows

puts table

示例输出:

+----------------------------+---------------------+
| TURN client to TURN server | TURN server to peer |
+----------------------------+---------------------+
| UDP                        | UDP                 |
| TCP                        | UDP                 |
| TLS over TCP               | UDP                 |
+----------------------------+---------------------+

使用python可以获得相同的输出:

pip install terminaltables

例如:

from terminaltables import AsciiTable
table_data = [
    ['TURN client to TURN server', 'TURN server to peer'],
    ['UDP', 'UDP'],
    ['TCP', 'UDP'],
    ['TLS over TCP', 'UDP']
]
table = AsciiTable(table_data)
print table.table

相关内容