NAME
Quiq::AsciiTable - ASCII-Tabelle parsen
BASE CLASS
DESCRIPTION
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.
Aufbau einer ASCII-Tabelle
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.
METHODS
Konstruktor
new() - Instantiiere Objekt
Synopsis
$tab = $class->new($str);
Arguments
Returns
Tabellen-Objekt
Description
Instantiiere ein Tabellen-Objekt und liefere eine Referenz auf dieses Objekt zurück.
Eigenschaften
alignments() - Ausrichtung der Kolumnenwerte
Synopsis
@align | $alignA = $tab->alignments;
@align | $alignA = $tab->alignments($domain);
Arguments
Returns
Liste der Kolumnenausrichtungen. Im Skalarkontext liefere eine Referenz auf die Liste.
Description
Liefere die Liste der Kolumnenausrichtungen der Domäne $domain. Mögliche Ausrichtungen:
Zentriert (centered).
Rechtsbündig (right aligned).
Linksbündig (left aligned).
Example
Tabelle:
Right Left Centered
Aligned Aligned Header
------- ------- --------
1 A A
21 AB AB
321 ABC ABC
Resultat:
@align = $tab->alignments;
# ('r','l','c')
multiLine() - Tabelle ist MultiLine-Tabelle
Synopsis
$bool = $tab->multiLine;
Returns
Boolean
Description
Liefere 1, wenn die Tabelle eine MultiLine-Tabelle ist, andernfalls 0.
Example
Tabelle:
Right Left Centered
Aligned Aligned Header
------- ------- --------
1 Erste A
Zeile
2 Zweite B
Zeile
3 Dritte C
Zeile
Resultat:
$multiLine = $tab->multiLine;
# 1
rows() - Liste der Zeilen
Synopsis
@rows | $rowA = $tab->rows;
Returns
Liste der Zeilen. Im Skalarkontext liefere eine Referenz auf die Liste.
Example
Tabelle:
Right Left Centered
Aligned Aligned Header
------- ------- --------
1 A A
21 AB AB
321 ABC ABC
Resultat:
@rows = $tab->rows;
# (['1', 'A', 'A'],
# ['21', 'AB', 'AB'],
# ['321','ABC','ABC'])
titles() - Liste der Kolumnentitel
Synopsis
@titles | $titleA = $tab->titles;
Returns
Liste der Kolumnentitel. Im Skalarkontext liefere eine Referenz auf die Liste.
Example
Tabelle:
Right Left Centered
Aligned Aligned Header
------- ------- --------
1 A A
21 AB AB
321 ABC ABC
Resultat:
@titles = $tab->titles;
# ("Right\nAligned","Left\nAligned","Centered\nHeader")
width() - Anzahl der Kolumnen
Synopsis
$n = $tab->width;
Returns
Kolumnenanzahl (Integer > 0)
Description
Liefere die Anzahl der Kolumnen der Tabelle.
Example
Tabelle:
Right Left Centered
Aligned Aligned Header
------- ------- --------
1 A A
21 AB AB
321 ABC ABC
Resultat:
$n = $tab->width;
# 3
Formate
asText() - Liefere ASCII-Tabelle
Synopsis
$str = $class->asText;
Returns
ASCII-Tabelle (String)
Description
Liefere die Tabelle als Zeichenkette, wie sie dem Konstruktor übergeben wurde, jedoch ohne Einrückung.
VERSION
1.132
AUTHOR
Frank Seitz, http://fseitz.de/
COPYRIGHT
Copyright (C) 2019 Frank Seitz
LICENSE
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.