1

我有一个 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] 等。我确信使用循环有一个更明智的方法来解决这个问题,但我不知道如何实现这一点。

有任何想法吗?

4

3 回答 3

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
于 2013-01-18T10:15:20.020 回答
1

您可以使用join

print '&', join('&', @operator), '\\';
于 2013-01-18T10:01:54.437 回答
0

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

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

在打印语句之前。

郊狼

于 2013-01-18T10:37:20.613 回答