perl的格式化(Format)報表輸出實現代碼_perl

來源:互聯網
上載者:User

perl有最好的文本資料處理能力.這是大家都知道的.在perl本身有一個別的軟體沒有的小功能,就是Perl格式.它相當於簡單的命令列報表和圖表輸出.這個需要先聲明格式.建立格式的檔案控制代碼.然後由@,^,<,>,|這樣的字元構成所謂的”報表”來輸出圖表.這樣可以指定出行的外觀.後面接資料項目,最後用write來顯示格式化的內容.

範例:
輸出紀錄格式輸出象下邊一樣定義:
format NAME =
FORMLIST
.

第一部分,聲明.如上.如果省略 NAME,上面的代碼將定義格式輸出 STDOUT。
第二部分,格式行FORMLIST 由一些有序的行組成,每一行都是下面三種類型中的一種:
1. 注釋,以第一列為 # 來表示.
2. 一個格式行,用來定義一個輸出行的格式,就是指上面講的@,^,<,>,|這樣的字元
3. 參數行,資料行,用來向前面的格式行中插入值,都是perl的變數
第三部分, 結束 “.”來表示.

格式行(圖形行)文法:
格式行中每個被替換的部分分別以 @ 或者 ^ 開頭。這些行不作任何形式的變數代換。
@  欄位(不要同數組符號 @ 相混淆)是普通的欄位。

<, >,|     欄位的長度通過在格式符號 @,^ 後跟隨特定長度的 <, >,| 來定義,同時<,>,| 還分別表示,靠左對齊,靠右對齊,置中對齊。如果變數超出定義的長度,那麼它將被截斷。

^ 欄位,用來進行多行文字區塊填充。

複製代碼 代碼如下:

$text = "aaa bbb ccc ";
format STDOUT =
first: ^<<<<
    $text
second: ^<<<<
    $text
third: ^<<<<
    $text 
.
write

這樣它會輸出如下:
first: aaa
second: bbb
third: ccc

它預設會對字串$text進行分解,象split.當然,是以$:存的內容做分割符.
#(在 @ 或 ^ 後邊)   靠右對齊的另外一種方式,在這些符號後面指定一個數字欄位。你可以在這種地區中插入一個 . 來制定小數點的位置。如果這些地區的值包含一個分行符號,那麼只輸出分行符號前面的文本。如@.##就是輸出二位小數.
@*        可以被用來列印多行不截斷的值,也就是多行沒有格式化的輸出.

參數行(資料行)
參數行指定參數的順序必須跟相應的格式行的欄位順序一致。不同參數的運算式需要使用逗號分隔。
參數的資料可以是標量資料,也可以是函數的傳回值.
參數行被處理之前所有的參數運算式都在列表環境中求值,因此單個列表運算式會產生多個列表元素。
通過使用圓括弧將運算式括起來,可以使運算式擴充到多行 (因此,圓括弧必須是第一行的第一個標誌)。這樣就可以將值同相應的格式域對應起來方便閱讀。
運算式中,空白字元 \n,\t,和 \f 總是被解釋成單個空格

格式變數

$~ 中 ($FORMAT_NAME)          格式名字
$^ ($FORMAT_TOP_NAME)         當前的表頭格式名字儲存在
$% ($FORMAT_PAGE_NUMBER)      當前輸出的頁號
$= ($FORMAT_LINES_PER_PAGE)   每頁中的行數
$| ($FORMAT_AUTOFLUSH)      是否自動重新整理輸出緩衝區儲存
$^L ($FORMAT_FORMFEED)       在每一頁(除了第一頁)表頭之前需要輸出的字串儲存在

注:這些變數以檔案控制代碼為基礎設定,因此你需要 select 與特定格式關聯的檔案控制代碼來影響這些格式變數

調用輸出
write
最後直接用write函數來顯示格式化的常值內容.

多頁報表
$%  當前輸出的頁面編號
$=  頁中的行數
$-  還有多少剩下的行數

在使用輸出時,最好建一個表的頂部輸出.這樣看起來會好看很多.

執行個體代碼:

複製代碼 代碼如下:

#!/usr/bin/perl
use strict;
use warnings;

my ($name,$login,$office,$uid,$gid, $home);
open FD,"</etc/passwd" or die "$?";
while(<FD>){
  ($name,$login,$office,$uid,$gid, $home) = split (":",$_);
    $^ = 'STDOUT_TOP';
    $~ = 'STDOUT';
    $= = 39;
    write;
}

format STDOUT_TOP =
@>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
"Page $%"
                           Passwd File
  Name                Login    Office   Uid   Gid Home
------------------------------------------------------------------
.

format STDOUT =
@<<<<<<<<<<<<<<<<<< @||||||| @<<<<<<@>>>> @>>>> @<<<<<<<<<<<<<<<<<
$name,               $login,  $office,$uid,$gid, $home

.

輸出如下
                                                  Page 3
                           Passwd File
  Name                Login    Office   Uid   Gid Home
--------------------------------------------------------------------
sshd                   x     115    65534       /var/run/sshd
vde2-net               x     116      128       /var/run/vde2
mysql                  x     117      129 MySQL /var/lib/mysql
oracle                 x     1001    1001       /usr/lib/oracle/xe
tomcat6                x     118      130       /usr/share/tomcat6

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.