从perl创建一个灵活的乳胶桌

时间:2013-01-18 09:45:44

标签: perl latex

我有一个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的值,即很可能运算符数组可能随时间变化(即添加或删除新的首字母)。在这种情况下,我会重写我的脚本的乳胶表部分,即添加$运算符[8]等。我敢肯定有一个更明智的方法来解决这个问题使用循环但我无法弄清楚如何实现这一点。

有什么想法吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以使用join

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

答案 2 :(得分:0)

用破折号分隔每三个项目添加到printrow函数

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

在打印声明之前。