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
廣告
© . All rights reserved.