从Perl数据结构打印表

时间:2012-08-29 19:41:43

标签: perl html-table perl-data-structures template-toolkit dancer

我有类似以下的Perl数据结构:

%hash = (
    table_id => {
        column_1_header =>
            [
                 column_value_1,
                 column_value_2,
                 column_value_3
            ],
        column_2_header =>
            [
                 column_value_4,
                 column_value_5,
                 column_value_6,
                 column_value_7,
            ],
    },
);

我的目标是根据结构中列出的每个列生成一系列表格。例如:

<table id="table_id">
    <tbody>
        <tr>
            <td>column_1_header</td>
            <td>column_2_header</td>
        </tr>
        <tr>
            <td>column_value_1</td>
            <td>column_value_4</td>
        </tr>
        <tr>
            <td>column_value_2</td>
            <td>column_value_5</td>
        </tr>
        <tr>
            <td>column_value_3</td>
            <td>column_value_6</td>
        </tr>
        <tr>
            <td></td>
            <td>column_value_7</td>
        </tr>
    </tbody>
</table>

我正在使用Perl Dancer和Template Toolkit。有什么选择可以轻松地像这样的表?

1 个答案:

答案 0 :(得分:3)

更改数据,使其按记录而不是按列分组。

use Algorithm::Loops qw( MapCarU );

for my $table_id (keys(%hash)) {
    my $table   = $hash{$table_id};
    my @headers = keys(%$table);
    my @recs = ( \@headers, MapCarU(sub { [ @_ ] }, @{$table}{@headers} ) );
    $hash{$table_id} = \@recs;
}

以上更改

%hash = (
    table_id => {
        col_1_header => [ val_1, val_2, val_3 ],
        col_2_header => [ val_4, val_5, val_6, val_7 ],
    },
);

%hash = (
    table_id => [
        [ col_1_header, col_2_header ],
        [ val_1,        val_4  ],
        [ val_2,        val_5  ],
        [ val_3,        val_6  ],
        [ undef,        val_7  ],
    ],
);

请注意,数据结构不包含足够的信息来重新创建原始列顺序。