Quiq::AsciiTable - ASCII-Tabelle parsen
Quiq::Hash
Ein Objekt der Klasse repräsentiert eine Tabelle, die in Form eines ASCII-Texts gegeben ist. Diese Darstellung wird an den Konstruktor übergeben, von diesem geparst und inhaltlich analysiert. Die Klasse stellt Methoden zur Verfügung, um die Eigenschaften der Tabelle abzufragen.
Eine ASCII-Tabelle hat den allgemeinen Aufbau:
Right Left Center ----- ---- ------ 1 A A 21 AB AB 321 ABC ABC 4321 ABCD ABCD
Die Tabelle besteht aus einem Tabellen-Kopf und einem Tabellen-Körper. Der Kopf enthält die Kolumnen-Titel und der Körper die Kolumnen-Daten. Die beiden Bereiche werden durch eine Trennzeile aus Bindestrichen (-) und Leerzeichen ( ) getrennt. Außer der Trennung in Kopf und Körper definiert die Trennzeile durch die Bindestriche die Anzahl, Lage und Breite der einzelnen Kolumnen.
Obige Tabelle besitzt z.B. drei Kolumnen: Die erste Kolumne ist 5 Zeichen breit und reicht von Zeichenposition 0 bis 4. Die zweite Kolumne ist 4 Zeichen breit und reicht von Zeichenposition 6 bis 9. Die dritte Kolumne ist 6 Zeichen breit und reicht von Zeichenpostion 11 bis 16. Die Positionsangaben sind zeilenbezogen und 0-basiert.
Aus der Anordnung der Werte in einer Kolumne - sowohl im Kopf als auch im Körper - ergibt sich, ob die Kolumne links, rechts oder zentriert ausgerichtet ist. Bei einer links ausgerichteten Kolumne belegen alle (nichtleeren) Werte die erste Zeichenpositon. Bei einer rechts ausgerichteten Kolumne belegen alle (nichtleeren) Werte die letzte Zeichenpositon. Bei einer zentrierten Kolumne sind die Werte weder eindeutig links noch rechts ausgerichtet.
Der Tabellen-Kopf, also die Titel, können mehrzeilig sein:
Right Left Aligned Aligned Centered ------- ------- -------- 1 A A 21 AB AB 321 ABC ABC 4321 ABCD ABCD
Die Titel sind optional, können also auch fehlen:
----- ---- ------ 1 A A 21 AB AB 321 ABC ABC 4321 ABCD ABCD
Die Kolumnenwerte können mehrzeilig sein:
Right Left Aligned Aligned Centered ------- -------------- -------- 1 This is A the first row 2 Second row B 3 The third C row
Bei einer Tabelle mit mehrzeiligen Kolumnenwerten werden die Zeilen durch Trennzeilen getrennt, gleichgültig, ob die einzelne Zeile einen mehrzeiligen Kolumnenwert enhält oder nicht (siehe Zeile 2). Die Trennzeile kann eine einfache Leerzeile sein oder Bindestriche enthalten wie die Trennzeile zwischen Tabellen-Kopf und -Körper:
Right Left Aligned Aligned Centered ------- -------------- -------- 1 This is A the first line ------- -------------- -------- 2 Second line B ------- -------------- -------- 3 The third C line ------- -------------- --------
Generell gilt ferner:
Ist die Tabelle eingerückt, wird diese Einrückung entfernt. Die Einrückung muss aus Leerzeichen bestehen.
Leerzeien oberhalb und unterhalb der Tabelle werden entfernt.
$tab = $class->new($str);
Zeichenkette mit ASCII-Tabelle.
Tabellen-Objekt
Instantiiere ein Tabellen-Objekt und liefere eine Referenz auf dieses Objekt zurück.
@align | $alignA = $tab->alignments; @align | $alignA = $tab->alignments($domain);
Legt die gelieferte Wertemenge fest.
Gelieferte Werte: 'l', 'r', 'c'.
Gelieferte Werte: 'left', 'right', 'center'.
Liste der Kolumnenausrichtungen. Im Skalarkontext liefere eine Referenz auf die Liste.
Liefere die Liste der Kolumnenausrichtungen der Domäne $domain. Mögliche Ausrichtungen:
Zentriert (centered).
Rechtsbündig (right aligned).
Linksbündig (left aligned).
Tabelle:
Right Left Centered Aligned Aligned Header ------- ------- -------- 1 A A 21 AB AB 321 ABC ABC
Resultat:
@align = $tab->alignments; # ('r','l','c')
$bool = $tab->multiLine;
Boolean
Liefere 1, wenn die Tabelle eine MultiLine-Tabelle ist, andernfalls 0.
Right Left Centered Aligned Aligned Header ------- ------- -------- 1 Erste A Zeile 2 Zweite B Zeile 3 Dritte C Zeile
$multiLine = $tab->multiLine; # 1
@rows | $rowA = $tab->rows;
Liste der Zeilen. Im Skalarkontext liefere eine Referenz auf die Liste.
@rows = $tab->rows; # (['1', 'A', 'A'], # ['21', 'AB', 'AB'], # ['321','ABC','ABC'])
@titles | $titleA = $tab->titles;
Liste der Kolumnentitel. Im Skalarkontext liefere eine Referenz auf die Liste.
@titles = $tab->titles; # ("Right\nAligned","Left\nAligned","Centered\nHeader")
$n = $tab->width;
Kolumnenanzahl (Integer > 0)
Liefere die Anzahl der Kolumnen der Tabelle.
$n = $tab->width; # 3
$str = $class->asText;
ASCII-Tabelle (String)
Liefere die Tabelle als Zeichenkette, wie sie dem Konstruktor übergeben wurde, jedoch ohne Einrückung.
1.148
Frank Seitz, http://fseitz.de/
Copyright (C) 2019 Frank Seitz
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Quiq, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Quiq
CPAN shell
perl -MCPAN -e shell install Quiq
For more information on module installation, please visit the detailed CPAN module installation guide.