The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Quiq::AsciiTable - ASCII-Tabelle parsen

BASE CLASS

Quiq::Hash

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

$str

Zeichenkette mit ASCII-Tabelle.

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

$domain (Default: 'latex')

Legt die gelieferte Wertemenge fest.

'latex'

Gelieferte Werte: 'l', 'r', 'c'.

'html'

Gelieferte Werte: 'left', 'right', 'center'.

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.133

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.