NAME
Data::TableData::Object::Base - Base class for Data::TableData::Object::*
VERSION
This document describes version 0.116 of Data::TableData::Object::Base (from Perl distribution Data-TableData-Object), released on 2022-05-19.
METHODS
new($data[ , $spec]) => obj
Constructor. $spec
is optional, a specification hash as described by TableDef.
$td->cols_by_name => hash
Return the columns as a hash with name as keys and index as values.
Example:
{name=>0, gender=>1, age=>2}
$td->cols_by_idx => array
Return the columns as an array where the element will correspond to the column's position.
Example:
["name", "gender", "age"]
$td->row_count() => int
Return the number of rows.
See also: col_count()
.
$td->col_count() => int
Return the number of columns.
See also: row_count()
.
$td->col_exists($name_or_idx) => bool
Check whether a column exists. Column can be referred to using its name or index/position (0, 1, ...).
$td->col_content($name_or_idx) => aos
Get the content of a column as an array of strings. Return undef if column is unknown. For example, given this table data:
| name | age |
|-------+-----|
| andi | 25 |
| budi | 29 |
| cinta | 17 |
then $td->col_content('name')
or $td->col_content(0)
will be:
['andi', 'budi', 'cinta']
$td->col_name($idx) => str
Return the name of column referred to by its index/position. Undef if column is unknown.
See also: col_idx()
.
$td->col_idx($name) => int
Return the index/position of column referred to by its name. Undef if column is unknown.
See also: col_name()
.
$td->row($idx) => s/aos/hos
Get a specific row ($idx
is 0 to mean first row, 1 for second, ...).
$td->row_as_aos($idx) => aos
Get a specific row ($idx
is 0 to mean first row, 1 for second, ...) as aos.
$td->row_as_hos($idx) => hos
Get a specific row ($idx
is 0 to mean first row, 1 for second, ...) as hos.
$td->rows() => array
Return rows as array(ref). Each element (row) can either be a scalar (in the case of hash or aos table data) or aos (in the case of aoaos table data) or hos (in the case of aohos table data).
This is appropriate if you only want the rows and do not care about the fom of the row, for example if you want to output some of the rows or shuffle them.
See also: rows_as_aoaos()
and rows_as_aohos()
.
$td->rows_as_aoaos() => aoaos
Return rows as array of array-of-scalars.
See also: rows()
and rows_as_aohos()
.
$td->rows_as_aohos() => aohos
Return rows as array of hash-of-scalars.
See also: rows()
and rows_as_aoaos()
.
$td->select_as_aoaos([ \@cols[ , $func_filter_row[ , \@sorts] ] ]) => aoaos
Like rows_as_aoaos()
, but allow selecting columns, filtering rows, sorting.
\@cols
is an optional array of column specification to return in the resultset. Currently only column names are allowed. You can mention the same column name more than once.
$func_filter_row
is an optional coderef that will be passed ($td, $row_as_hos)
and should return true/false depending on whether the row should be included in the resultset. If unspecified, all rows will be returned.
\@sorts
is an optional array of column specification for sorting. For each specification, you can use COLUMN_NAME or -COLUMN_NAME (note the dash prefix) to express descending order instead of the default ascending. If unspecified, no sorting will be performed.
See also: select_as_aohos()
.
$td->select_as_aohos([ \@cols[ , $func_filter_row[ , \@sorts ] ] ]) => aohos
Like select_as_aoaos()
, but will return aohos (array of hashes-of-scalars) instead of aoaos (array of arrays-of-scalars).
See also: select_as_aoaos()
.
$td->uniq_col_names => list
Return a list of names of columns that are unique. A unique column exists in all rows and has a defined and unique value across all rows. Example:
my $td = table([
{a=>1, b=>2, c=>undef, d=>1},
{ b=>2, c=>3, d=>2},
{a=>1, b=>3, c=>4, d=>3},
]); # -> ('d')
In the above example, a
does not exist in the second hash, <b> is not unique, and c
has an undef value in the the first hash.
$td->const_col_names => list
Return a list of names of columns that are constant. A constant column ehas a defined single value for all rows (a column that contains all undef's counts). Example:
my $td = table([
{a=>1, b=>2, c=>undef, d=>2},
{ b=>2, c=>undef, d=>2},
{a=>2, b=>3, c=>undef, d=>2},
]); # -> ('c', 'd')
In the above example, a
does not exist in the second hash, <b> has two different values.
$td->del_col($name_or_idx) => str
Delete a single column. Will die if the underlying form does not support column deletion (e.g. aos and hash).
Will modify data. Will also adjust column positions. And will also modify spec, if spec was given.
Return the deleted column name.
If column is unknown, will simply return undef.
$td->rename_col($old_name_or_idx, $new_name)
Rename a column to a new name. Will die if the underlying form does not support column rename (e.g. aos and hash).
Die if column is unknown. Die if new column name is a number, or an existing column name. Will simply return if new column name is the same as old name.
Might modify data (e.g. in aohos). Will modify spec, if spec was given.
$td->switch_cols($name_or_idx1, $name_or_idx2)
Switch two columns. Will die if the underlying form does not support column rename (e.g. aos and hash).
Die if either column is unknown. Will simply return if both are the same column.
Might modify data (e.g. in aohos). Will modify spec, if spec was given.
$td->add_col($name [ , $idx [ , $spec [ , \@data ] ] ])
Add a column named $name
. If $idx
is specified, will set the position of the new column (and existing columns will shift to the right at that position). If $idx
is not specified, will put the new column at the end.
@data
is the value of the new column for each row. If not specified, the new column will be set to undef
.
Does not make sense for table form which can only have a fixed number of columns, e.g. aos, or hash.
$td->set_col_value($name_or_idx, $value_sub)
Set value of (all rows of) a column. $value_sub
is a coderef which will be given hash arguments containing these keys: table
(the Data::TableData::Object instance), row_idx
(row number, 0-based), col_name
(column name), col_idx
(column index, 0-based), value
(current value).
$td->iter
Generate a simple (coderef) iterator to iterate rows of the table. Will call row() repeatedly from the first row (index 0) to the last (determined by $td->row_count). After the rows are exhausted, the iterator will return undef
. Note that for an aos table, it is possible that a row has the value of undef
and thus the iterator can return undef
before the rows are exhausted.
HOMEPAGE
Please visit the project's homepage at https://metacpan.org/release/Data-TableData-Object.
SOURCE
Source repository is at https://github.com/perlancar/perl-TableData-Object.
AUTHOR
perlancar <perlancar@cpan.org>
CONTRIBUTING
To contribute, you can send patches by email/via RT, or send pull requests on GitHub.
Most of the time, you don't need to build the distribution yourself. You can simply modify the code, then test via:
% prove -l
If you want to build the distribution (e.g. to try to install it locally on your system), you can install Dist::Zilla, Dist::Zilla::PluginBundle::Author::PERLANCAR, and sometimes one or two other Dist::Zilla plugin and/or Pod::Weaver::Plugin. Any additional steps required beyond that are considered a bug and can be reported to me.
COPYRIGHT AND LICENSE
This software is copyright (c) 2022, 2021, 2019, 2017, 2016, 2015, 2014 by perlancar <perlancar@cpan.org>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
BUGS
Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Data-TableData-Object
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.