2013-01-18 71 views
1

我有一個perl腳本,它可以輸出數據庫的每月統計數據。這些是使用下面的代碼片段從perl創建靈活的乳膠桌

print $fh <<END; 
This report details clinical and imaging statistics from $date_start to $date_stop. 

\\large \\bf Clinical Statistics 

\\normalsize \\rm 

\\begin{table}[h] 
\\centering 
\\begin{tabular}{p{4cm}cccccccc} 
\\hline 
    & $operator[0] & $operator[1] & $operator[2] & $operator[3] & $operator[4] & $operator[5] & $operator[6] & $operator[7] \\\\ 
\\hline 

    Cannulations & $venflons[0] & $venflons[1] & $venflons[2] & - & $venflons[4] & $venflons[5] & $venflons[6] & $venflons[7] \\\\ 
    Clinical Assessments & $clin_ass[0] & $clin_ass[1] & $clin_ass[2] & - & $clin_ass[4] & $clin_ass[5] & $clin_ass[6] & - \\\\ 
    Lead Stressor & $etlead[0] & $etlead[1] & $etlead[2] & - & $etlead[4] & $etlead[5] & $etlead[6] & $etlead[7] \\\\ 
    Assistant Stressor & $etass[0] & $etass[1] & $etass[2] & - & $etass[4] & $etass[5] & $etass[6] & - \\\\ 
    ECG Preparation & $ecg_prep[0] & $ecg_prep[1] & $ecg_prep[2] & $ecg_prep[3] & $ecg_prep[4] & $ecg_prep[5] & $ecg_prep[6] & - \\\\Patient Identification & $patient_id[0] & $patient_id[1] & $patient_id[2] & $patient_id[3] & $patient_id[4] & $patient_id[5] & $patient_id[6] & - \\\\ 
    \\hline 
    \\end{tabular} 
    \\end{table} 

    END 

基本上perl腳本查詢各種任務,每個操作員,並存儲在各個領域計數的數量總結在表中。運算符是一個perl數組,並且可能會將大小改變1或2個值,即很可能運算符數組可能隨時間而改變(即添加或刪除新的首字母縮寫)。在這種情況下,我會重寫我的腳本的乳膠表部分,即添加$ operator [8]等等。我確定使用循環有一個更明智的方法來解決這個問題,但我無法解決如何實現這一點。

任何想法?

+1

也許使用乳膠模塊?如[LaTeX :: Table](http://search.cpan.org/perldoc?LaTeX%3A%3ATable)。 – TLP

回答

2

定義一個函數,它打印的行

sub print_row 
{ 
    my($fh) = shift; 
    print $fh join(' & ', @_), "\\\\\n"; 
} 

此功能打印行$fh,所有參數組成的print_row。如果您想要打印更多列,只需提供更多參數。

現在使用您的表

print $fh <<END; 
This report details clinical and imaging statistics from $date_start to $date_stop. 

\\large \\bf Clinical Statistics 

\\normalsize \\rm 

\\begin{table}[h] 
\\centering 
\\begin{tabular}{p{4cm}cccccccc} 
\\hline 
END 

print_row($fh, '', @operator); 
print $fh "\\hline\n"; 
print_row($fh, 'Cannulations', @venflons, '-'); 
print_row($fh, 'Clinical Assessments', @clin_ass, '-'); 
print_row($fh, 'Lead Stressor', @etlead); 
print_row($fh, 'Assistant Stressor', @etass, '-'); 
print_row($fh, 'ECG Preparation', @ecg_prep, '-'); 
print_row($fh, 'Patient Identification', @patient_id, '-'); 

print $fh <<END; 
\\hline 
\\end{tabular} 
\\end{table} 

END 
+0

我將如何更新表格中的列數 - \\ begin {tabular} {p {4cm} cccccccc} – moadeep

+0

@moadeep只需添加更多的'''','''''''''然後用正確數量的列填充適當的數組。根據需要添加或保留「 - 」。我也注意到,'print_row'可以簡化一下。請參閱最新的答案。 –

1

您可以使用join

print '&', join('&', @operator), '\\'; 
0

每三個項目以短線單獨打印語句之前加入到printrow功能

#inserts dash if no remainder from division of four of the array index 
for (0..$#columns){ 
splice(@columns,$_,0,'-') unless ($_ % 4) 
}