perlのフォーマット(Format)レポート出力

9621 ワード

perlは最高のテキストデータ処理能力を持っている.これはみんな知っていることだ.perl自体には個別のソフトウェアにはない小さな機能があり、Perlフォーマットです.単純なコマンドラインレポートとグラフ出力に相当します.これはまずフォーマットを宣言する必要があります.形式のファイルハンドルを作成します.そして、@,^,<,>,|という文字からなるいわゆる"レポート"からグラフを出力する.これにより、移動の外観を指定することができる.後にデータ項目を接続する、最後にwriteでフォーマットされた内容を表示する.
サンプル:出力記録フォーマット出力は下のように定義:format NAME=FORMLIST.
第一部,声明.以上のようにNAMEを省略すると、上記のコードはフォーマット出力stdOUTを定義します.第2部では、フォーマット行FORMLISTはいくつかの秩序ある行から構成され、各行は以下の3つのタイプの1つである.注記、第一列を#として表す.出力行のフォーマットを定義するフォーマット行.パラメータ行、データ行、前のフォーマット行に値を挿入するために使用される値は、perlの変数の第3の部分であり、終了する.を表示します.
フォーマット行(グラフィック行)構文:フォーマット行の各置換部分は@または^で始まる.これらの行は、任意の形式の変数で置換されません.@フィールド(配列記号@と混同しない)は通常のフィールドです.
<,>,|フィールドの長さは、フォーマット記号@,^の後に特定の長さの<,>,|に従って定義され、同時に<,>,|は、それぞれ、左揃え、右揃え、中央揃えを表します.変数が定義された長さを超えた場合、変数は切断されます.
^フィールドは、複数行のテキストブロックの埋め込みに使用されます.
$text = "aaa bbb ccc ";

format STDOUT =

first: ^<<<<

    $text

second: ^<<<<

    $text

third: ^<<<<

    $text  

.

write

次のように出力されます
first: aaa

second: bbb

third: ccc

デフォルトではsplit.のように文字列$textが分解されます.もちろん、$:保存されたコンテンツを分割記号とします.(@または^の後ろ)右揃えの別の方法で、これらの記号の後ろに数値フィールドを指定します.この領域に1つ挿入できます.を選択します.これらの領域の値に改行が含まれている場合は、改行の前のテキストのみが出力されます.@.##のように2桁の小数を出力します.@*複数行の切り捨てない値、すなわち複数行のフォーマットされていない出力を印刷するために用いることができる.
パラメータ行(データ行)パラメータ行指定パラメータの順序は、対応するフォーマット行のフィールド順序と一致する必要があります.異なるパラメータの式はカンマで区切る必要があります.パラメータのデータはスカラーデータであるもよいし、関数の戻り値であってもよい.パラメータ行が処理される前に、すべてのパラメータ式がリスト環境で評価されるため、単一のリスト式は複数のリスト要素を生成します.式を丸括弧で囲むことで、式を複数行に拡張できます(したがって、丸括弧は最初の行の最初のフラグである必要があります).これにより、値を対応するフォーマットドメインに対応させて読みやすくなります.式では、空白文字、t、およびfは常に単一のスペースとして解釈されます.
フォーマット変数$~の($FORMAT_NAME)フォーマット名$^($FORMAT_TOP_NAME)現在のヘッダフォーマット名が$%($FORMAT_PAGE_NUMBER)現在出力されているページ番号$=($FORMAT_LINES_PER_PAGE)各ページの行数$|($FORMAT_AUTOFFLUSH)出力バッファ記憶$^L($FORMAT_FORMAT_FORMEED)が各ページ(第1ページを除く)に自動的にリフレッシュされるかどうかヘッダーの前に出力する文字列は
注意:これらの変数はファイルハンドルに基づいて設定されているため、selectが特定のフォーマットに関連付けられたファイルハンドルを使用してこれらのフォーマット変数に影響を与える必要があります.
呼び出し出力writeは、最後にwrite関数を直接用いてフォーマットされたテキスト内容を表示する.
複数ページレポート$%現在出力されているページ番号$=ページ内の行数$-残りの行数
出力を使用する場合は、テーブルの上部出力を作成することが望ましい.これでずっときれいに見えます.
≪インスタンス|Instance|emdw≫
#!/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