0

打印表格我有一個Perl的數據結構如下所示:從一個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。簡單地選擇這樣的桌子有什麼選擇?

+2

['Template :: Tutorial :: Datafile'](https://metacpan.org/module/Template::Tutorial::Datafile#Producing-XML)將幫助你解決這個問題 – Zaid

+0

只是通過你的結構和準備桌子:)這很簡單。 –

+1

@Zaid,與教程使用的內容相比,數據是內部的。雖然TT可以處理內部數據,但它更簡單,但它首先是正確的。這是我的答案顯示。之後創建模板並不重要,所以我不打算展示它。 – ikegami

回答

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 ], 
    ], 
); 

注意該數據結構不包含足夠的信息來重建原始的列的順序。

相關問題