NAME

Quiq::Table - Tabelle

BASE CLASS

Quiq::Hash

SYNOPSIS

Mit Kolumnennamen:

use Quiq::Table;

# Daten

@rows = (
    [1,  'A',  76.253],
    [12, 'AB', 1.7   ],
    [123,'ABC',9999  ],
);

# Objekt instantiieren
$tab = Quiq::Table->new(['a','b','c'],\@rows);

# Werte der Kolumne b

@values = $tab->values('b');
say "@values";
==>
A AB ABC

# Ausgabe als Text-Tabelle

print $tab->asText;
==>
|   1 | A   |   76.253 |
|  12 | AB  |    1.700 |
| 123 | ABC | 9999.000 |

Ohne Kolumnennamen:

use Quiq::Table;

# Daten

@rows = (
    [1,  'A',  76.253],
    [12, 'AB', 1.7   ],
    [123,'ABC',9999  ],
);

# Objekt instantiieren
$tab = Quiq::Table->new(3,\@rows);

# Werte der Kolumne 1 (0-basierte Zählung)

@values = $tab->values(1);
say "@values";
==>
A AB ABC

# Ausgabe als Text-Tabelle

print $tab->asText;
==>
|   1 | A   |   76.253 |
|  12 | AB  |    1.700 |
| 123 | ABC | 9999.000 |

DESCRIPTION

Ein Objekt der Klasse repräsentiert eine Tabelle, also eine Liste von Arrays identischer Größe. Die Kolumnen können über ihre Position oder ihren Namen (sofern definiert) angesprochen werden. Die Klasse kann die Daten in verschiedenen Formaten tabellarisch ausgegeben.

EXAMPLE

Siehe quiq-ls

METHODS

Klassenmethoden

new() - Konstruktor

Synopsis

$tab = $class->new($width);
$tab = $class->new($width,\@rows);
$tab = $class->new(\@columns);
$tab = $class->new(\@columns,\@rows);

Arguments

$width

Anzahl der Kolumnen (Integer).

@columns

Liste von Kolumnennamen (Array of Strings).

@rows

Liste von Zeilen (Array of Arrays).

Returns

Referenz auf Tabellen-Objekt

Description

Instantiiere ein Tabellen-Objekt und liefere eine Referenz auf dieses Objekt zurück.

Objektmethoden

columns() - Liste der Kolumnennamen

Synopsis

@columns | $columnA = $tab->columns(@opt);

Options

-sloppy => $bool (Default: 0)

Wirf keine Exception, wenn keine Kolumnennamen definiert sind, sondern liefere eine leere Liste.

Returns

Liste der Kolumnennamen (Strings). Im Skalarkontext eine Referenz auf die Liste.

Description

Liefere die Liste der Kolumnennamen der Tabelle.

count() - Anzahl der Zeilen

Synopsis

$count = $tab->count;

Returns

Integer

Description

Liefere die Anzahl der Zeilen der Tabelle.

pos() - Position einer Kolumne

Synopsis

$pos = $tab->pos($column);
$pos = $tab->pos($pos);

Arguments

$column

Kolumnenname (String).

$pos

Kolumnenposition (Integer).

Returns

Integer

Description

Liefere die Position der Kolumne $column in den Zeilen-Arrays. Die Position ist 0-basiert. Ist das Argument eine Zahl (Position), liefere diese unverändert zurück.

properties() - Eigenschaften einer Kolumne

Synopsis

$prp = $tab->properties($pos);
$prp = $tab->properties($column);

Arguments

$pos

(Integer) Kolumnenposition

$column

(String) Kolumnenname (nur, wenn Kolumennamen definiert sind)

Options

-withTitles => $bool (Default: 0)

Beziehe die Länge der Kolumnennamen mit ein. D.h, wenn ein Kolumnenname länger ist als der längste Wert, setzte die maximale Länge (Property width) auf die Länge des Kolumnennamens.

Returns

Properties-Objekt (Quiq::Properties)

Description

Ermittele die Eigenschaften der Werte der Kolumne $column und liefere ein Objekt, das diese Eigenschaften abfragbar zur Verfügung stellt, zurück. Die Eigenschaften werden gecacht, so dass bei einem wiederholten Aufruf die Eigenschaften nicht erneut ermittelt werden müssen. Wird die Tabelle mit push() erweitert, wird der Cache automatisch gelöscht.

push() - Füge Zeile hinzu

Synopsis

$tab->push(\@arr);

Arguments

@arr

Liste von Zeilendaten (Strings).

Description

Füge eine Zeile mit den Kolumnenwerten @arr zur Tabelle hinzu. Die Anzahl der Elemente in @arr muss mit der Anzahl der Kolumnen übereinstimmen, sonst wird eine Exception geworfen. Durch das Hinzufügen einer Zeile werden die gecachten Kolumneneigenschaften - sofern vorhanden - gelöscht (siehe Methode properties()).

rows() - Liste der Zeilen

Synopsis

@rows | $rowA = $tab->rows;

Returns

Liste der Zeilen (Objekte der Klasse Quiq::TableRow). Im Skalarkontext eine Referenz auf die Liste.

Description

Liefere die Liste der Zeilen der Tabelle.

row() - Liefere Zeile

Synopsis

$row = $tab->row($i);

Arguments

$i

Index der Zeile (0 .. $tab->count-1)

Returns

(Object) Zeile

Description

Liefere Zeile mit Index $i.

values() - Werte einer Kolumne

Synopsis

@values | $valueA = $tab->values($pos,@opt);
@values | $valueA = $tab->values($column,@opt);

Arguments

$column

Kolumnenname (String).

Options

-distinct => $bool (Default: 0)

Liste der verschiedenen Werte.

Returns

Liste der Werte (Strings). Im Skalarkontext eine Referenz auf die Liste.

Description

Liefere die Liste der Werte der Kolumne $column. Per Default wird die Liste aller Werte geliefert, auch wenn sie mehrfach vorkommen. Siehe auch Option -distinct.

width() - Anzahl der Kolumnen

Synopsis

$width = $tab->width;

Returns

Integer

Description

Liefere die Anzahl der Kolumnen der Tabelle.

Formatierung

asAsciiTable() - Tabelle als Ascii-Table

Synopsis

$text = $tab->asAsciiTable;

Returns

Ascii-Table (String)

Description

Liefere die Tabelle in der Repräsentation der Klasse Quiq::AsciiTable.

Example

$tab = Quiq::Table->new(['Integer','String','Float'],[
    [1,  'A',  76.253],
    [12, 'AB', 1.7   ],
    [123,'ABC',9999  ],
]);

$str = $tab->asAsciiTable;
==>
%Table:
Integer String    Float
------- ------ --------
      1 A        76.253
     12 AB        1.700
    123 ABC    9999.000
.

asText() - Tabelle als Text

Synopsis

$text = $tab->asText(@opt);

Options

-colorize => $sub

Callback-Funktion, die für jede Zelle gerufen wird und eine Terminal-Farbe für die jeweilige Zelle liefert. Die Funktion hat die Struktur:

sub {
    my ($tab,$row,$pos,$val) = @_;
    ...
    return $color;
}

Die Terminal-Farbe ist eine Zeichenkette, wie sie Quiq::AnsiColor erwartet. Anwendungsbeispiel siehe quiq-ls.

Returns

Text-Tabelle (String)

Example

$tab = Quiq::Table->new(3,[
    [1,  'A',  76.253],
    [12, 'AB', 1.7   ],
    [123,'ABC',9999  ],
]);

$str = $tab->asText;
==>
|   1 | A   |   76.253 |
|  12 | AB  |    1.700 |
| 123 | ABC | 9999.000 |

VERSION

1.220

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2024 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.