43 votes

Comment dessiner des boîtes et des tableaux en texte brut

Dans de nombreux documents en texte brut, des caractères de dessin de boîte sont utilisés pour dessiner ces boîtes dans les figures et les tableaux. De tels exemples (de RFC 5766) sont montrés ci-dessous. Existe-t-il un moyen meilleur de dessiner ceci (par exemple, un outil de ligne de commande Unix), autre que d'utiliser la méthode d'essai-erreur?


Exemples de RFC 5766:

       +----------------------------+---------------------+
       | Client TURN au serveur TURN | Serveur TURN au pair|
       +----------------------------+---------------------+
       |             UDP            |         UDP         |
       |             TCP            |         UDP         |
       |        TLS sur TCP          |         UDP         |
       +----------------------------+---------------------+

Et celui-ci, également de RFC 5766:

                                        Pair A
                                        Adresse de           +---------+
                                        transport             |         |
                                        réflexe serveur       |         |
                                        192.0.2.150:32102     |         |
                                            |                 /|         |
                          TURN              |               / ^|  Pair A |
    Adresse                Serveur            |            /  ||         |
    de transport           de transport        |          //   ||         |
    du client              de l'adresse        |        //     |+---------+
    hôte                   du serveur          |      //       Pair A
    10.1.1.2:49721         192.0.2.15:3478     |+-+    //      Adresse de transport
            |               |               ||N|   /        de l'hôte
            |   +-+         |               ||A|  /         192.168.100.2:49582
            |   | |         |               v|T| /          
            |   | |         |               /+-+          
 +---------+|   | |         |+---------+   /              +---------+
 |         ||   |N|         ||         | //               |         |
 | Client  |v   | |         v| Serveur  |/                 |         |
 | TURN    |----|A|----------| TURN     |------------------|  Pair B |
 |         |    | |^         |         |^                ^|         |
 |         |    |T||         |         ||                ||         |
 +---------+    | ||         +---------+|                |+---------+
                | ||                    |                |
                | ||                    |                |
                +-+|                    |                |
                   |                    |                |
                   |                    |                |
             Adresse                     |            Pair B
             de transport réflexe          Relayée           Transport
             de transport du serveur      Adresse de        Adresse
             192.0.2.1:7000             transport du serveur   192.0.2.15:50000     192.0.2.210:49191

                                 Figure 1

47voto

harrymc Points 394411

Le site web gratuit ASCIIflow vous permettra de dessiner des boîtes de texte, du texte, des lignes, des flèches, des lignes libres, d'effacer, d'importer, d'exporter, et même d'annuler/rétablir. Que pourrait-on demander de plus?

Voici ma merveilleuse création en utilisant cet outil :

+-------------------------------+
|                               |
|  Ma première boîte ASCII       |
|                               |
+---------+---------------------+
          |
          |
          |
          | Ma première flèche ASCII
          |
          |
          |
+---------v----------------------+
|                                |
|  Ma deuxième boîte ASCII       |
+--------------------------------+

20voto

meuh Points 5650

Il est possible de dessiner de telles images en utilisant des outils datant de 30 ans, à savoir pic qui fait partie de la suite de commandes troff. De nos jours, le package groff de gnu contiendra la commande pic. Le lien montre une image d'une sortie PostScript typique, mais en utilisant nroff ou les options appropriées, vous obtiendrez une version en ascii-art. Consultez le manuel de l'utilisateur (pdf) de 1991 pour des exemples.

Les tableaux dans votre exemple sont probablement produits par cette même suite de commandes, en utilisant simplement tbl qui génère des tableaux à partir de listes simples.

Pour une version gui, vous pouvez utiliser artist-mode dans emacs pour dessiner des boîtes et des lignes fléchées, etc., en utilisant la souris ou le clavier. Regardez la démo vidéo youtube.

10voto

Edi Points 771

Dessiner des boîtes ou d'autres formes avec des caractères est connu sous le nom d'art ASCII (également appelé ANSI ou ISO art). Il existe de nombreux outils pour aider à créer de l'art ASCII, tels que ASCIIFlow en ligne, le rendu d'images en ASCII, des applications telles que figlet, etc. Certains ont été implémentés en JavaScript et peuvent être exécutés dans un navigateur sur n'importe quel système d'exploitation.

Il n'y a rien de nouveau sous le soleil - la micrographie est une sous-catégorie de la calligraphie avec une longue lignée, utilisée depuis des centaines d'années, en utilisant des lettres pour former des images, comme le calendrier ci-dessous, dont une grande partie de l'image est formée à partir de lettres.

Calendrier Omer, Sotheby's

8voto

DavidPostill Points 140654

Comment puis-je dessiner des tables ASCII?

Si vous voulez simplement dessiner des tables ASCII (comme votre premier exemple), consultez le générateur de tables de texte brut - TablesGenerator.com pour un utilitaire web qui vous aidera à créer de belles tables de données :

entrer la description de l'image ici

3voto

GAD3R Points 3539

À partir de la ligne de commande en utilisant terminal-table depuis GitHub.

Installer terminal-table:

gem install terminal-table

Par exemple:

irb
require 'terminal-table'

rows = []
rows << ['UDP', 'UDP']
rows << ['TCP', 'UDP']
rows << ['TLS over TCP ', 'UDP']
table = Terminal::Table.new :headings => ['Client TURN au serveur TURN', 'Serveur TURN au peer'], :rows => rows

puts table

Sortie de l'échantillon:

+----------------------------+---------------------+
| Client TURN au serveur TURN | Serveur TURN au peer|
+----------------------------+---------------------+
| UDP                        | UDP                 |
| TCP                        | UDP                 |
| TLS over TCP               | UDP                 |
+----------------------------+---------------------+

Le même résultat peut être obtenu en utilisant python:

pip install terminaltables

par exemple:

from terminaltables import AsciiTable
table_data = [
    ['Client TURN au serveur TURN', 'Serveur TURN au peer'],
    ['UDP', 'UDP'],
    ['TCP', 'UDP'],
    ['TLS over TCP', 'UDP']
]
table = AsciiTable(table_data)
print table.table

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X