在许多纯文本文档中,框绘制字符用于在图形和表格中绘制这些框。以下示例(来自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