Perl 格式 - 报告编写



如前所述,Perl 代表实用提取和报告语言 (Practical Extraction and Reporting Language),我们现在将讨论使用 Perl 编写报告。

Perl 使用名为“格式”的编写模板来输出报告。要使用 Perl 的格式功能,您必须:

  • 定义格式
  • 传递将显示在格式中的数据
  • 调用格式

定义格式

以下是定义 Perl 格式的语法

format FormatName =
   fieldline
   value_one, value_two, value_three
   fieldline
   value_one, value_two
   .

FormatName 代表格式的名称。字段行是数据应如何格式化的特定方式。值行代表将输入字段行的值。您用单个句点结束格式。

fieldline 可以包含任何文本或字段占位符。字段占位符保留用于稍后放置数据的空间。字段占位符的格式为:

@<<<<

此字段占位符左对齐,字段空间为 5。您必须计算 @ 符号和 < 符号才能知道字段中的空格数。其他字段占位符包括:

@>>>> right-justified
   @|||| centered
   @####.## numeric field holder
   @* multiline field holder

一个示例格式将是:

format EMPLOYEE =
   ===================================
   @<<<<<<<<<<<<<<<<<<<<<< @<< 
   $name $age
   @#####.##
   $salary
   ===================================
   .

在这个例子中,$name 将左对齐写入 22 个字符空间内,之后 age 将写入两个空间。

调用格式以写入数据

为了调用此格式声明,我们将使用 write 关键字:

write EMPLOYEE; #send to the output

问题是格式名称通常是打开的文件句柄的名称,write 语句会将输出发送到此文件句柄。由于我们希望数据发送到 STDOUT,我们必须将 EMPLOYEE 与 STDOUT 文件句柄关联。但是,首先我们必须确保 STDOUT 是我们选择的文件句柄,使用 select() 函数

select(STDOUT);

然后,我们将通过使用特殊变量 $~ 将新的格式名称设置为 STDOUT,从而将 EMPLOYEE 与 STDOUT 关联。

$~ = "EMPLOYEE";

当我们现在执行 write() 时,数据将被发送到 STDOUT。记住:如果您没有将 STDOUT 设置为默认文件句柄,您可以通过将 select 的返回值赋给标量值,并在特殊变量赋予格式名称后使用此标量变量一起使用 select 来恢复到原始文件句柄,以与 STDOUT 关联。

上面的例子将生成以下格式的报告

   Kirsten              12
   Mohammad             35
   Suhi                 15
   Namrat               10

定义报表页眉

一切看起来都很好。但是您可能希望向报表添加页眉。此页眉将打印在每一页的顶部。这样做非常简单。除了定义模板外,您还必须定义一个页眉,其名称相同,但附加了 _TOP 关键字,如下所示

   format EMPLOYEE_TOP =
   ------------------------
   Name                 Age
   ------------------------
   .

现在您的报表将如下所示

   ------------------------
   Name                 Age
   ------------------------
   Kirsten              12
   Mohammad             35
   Suhi                 15
   Namrat               10

定义分页和每页行数

如果您的报表超过一页怎么办?您有解决方法。使用 $% 变量以及页眉,如下所示

   format EMPLOYEE_TOP =
   ------------------------
   Name                 Age   Page @<
   ------------------------        $%
   .

现在您的输出将如下所示

   ------------------------
   Name                 Age   Page 1
   ------------------------    
   Kirsten              12
   Mohammad             35
   Suhi                 15
   Namrat               10

您可以使用特殊变量 $=(或 $FORMAT_LINES_PER_PAGE)设置每页的行数。默认情况下,$= 为 60。

定义报表页脚

剩下的最后一件事是页脚。与页眉非常相似,您可以定义页脚,它将在每一页之后写入。在这里,您将使用 _BOTTOM 关键字而不是 _TOP。

   format EMPLOYEE_BOTTOM =
   End of Page @<
               $%
   .

这将为您提供以下结果

   ------------------------
   Name                 Age   Page 1
   ------------------------    
   Kirsten              12
   Mohammad             35
   Suhi                 15
   Namrat               10
   End of Page 1

有关与格式相关的完整变量集,请参阅 Perl 特殊变量 部分。

perl_function_references.htm
广告