Perl-フォーマット

Perlは、「フォーマット」と呼ばれる書き込みテンプレートを使用してレポートを出力します。Perlのフォーマット機能を使用するには、最初にフォーマットを定義する必要があり、次にそのフォーマットを使用してフォーマットされたデータを書き込むことができます。

フォーマットを定義する

以下は、Perlフォーマットを定義するための構文です-

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

ここに FormatNameフォーマットの名前を表します。ザ・fieldline特定の方法です。データをフォーマットする必要があります。値の行は、フィールド行に入力される値を表します。フォーマットは単一のピリオドで終了します。

fieldline任意のテキストまたはフィールドホルダーを含めることができます。フィールドホルダーは、後日そこに配置されるデータ用のスペースを保持します。フィールドホルダーの形式は-

@<<<<

このフィールドホルダーは左寄せで、フィールドスペースは5です。フィールド内のスペースの数を知るには、@記号と<記号を数える必要があります。他のフィールドホルダーは次のとおりです。

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

形式の例は次のようになります-

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

この例では、$ nameは22文字のスペース内で左揃えとして記述され、それ以降は2つのスペースで記述されます。

フォーマットの使用

このフォーマット宣言を呼び出すために、 write キーワード−

write EMPLOYEE;

問題は、フォーマット名が通常開いているファイルハンドルの名前であり、writeステートメントが出力をこのファイルハンドルに送信することです。データをSTDOUTに送信する必要があるため、EMPLOYEEをSTDOUTファイルハンドルに関連付ける必要があります。ただし、最初に、select()関数を使用して、STDOUTが選択したファイルハンドルであることを確認する必要があります。

select(STDOUT);

次に、次のように特別な変数$〜または$ FORMAT_NAMEを使用して、新しいフォーマット名をSTDOUTに設定することにより、EMPLOYEEをSTDOUTに関連付けます。

$~ = "EMPLOYEE";

ここでwrite()を実行すると、データはSTDOUTに送信されます。注意:STDOUTではなく他のファイルハンドルでレポートを作成する場合は、select()関数を使用してそのファイルハンドルを選択でき、残りのロジックは同じままです。

次の例を見てみましょう。ここでは、使用法を示すためだけに値をハードコーディングしています。実際の使用法では、ファイルまたはデータベースから値を読み取って実際のレポートを生成し、最終レポートをファイルに再度書き込む必要がある場合があります。

#!/usr/bin/perl

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

select(STDOUT);
$~ = EMPLOYEE;

@n = ("Ali", "Raza", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0;
foreach (@n) {
   $name = $_;
   $age = $a[$i];
   $salary = $s[$i++];
   write;
}

実行すると、次の結果が生成されます-

===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

レポートヘッダーを定義する

すべてがうまく見えます。ただし、レポートにヘッダーを追加することをお勧めします。このヘッダーは、各ページの上部に印刷されます。これを行うのは非常に簡単です。テンプレートの定義とは別に、ヘッダーを定義して$ ^または$ FORMAT_TOP_NAME変数に割り当てる必要があります-

#!/usr/bin/perl

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

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

select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;

@n = ("Ali", "Raza", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0;
foreach (@n) {
   $name = $_;
   $age = $a[$i];
   $salary = $s[$i++];
   write;
}

これで、レポートは次のようになります。

===================================
Name                    Age
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

ページネーションを定義する

レポートに複数のページが含まれている場合はどうでしょうか。あなたはそのための解決策を持っています、単に使用してください$% または$ FORMAT_PAGE_NUMBERは、次のようにヘッダーと一緒に変更できます-

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

これで、出力は次のようになります。

===================================
Name                    Age Page 1
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

ページの行数

特別な変数を使用して、ページあたりの行数を設定できます $= (または$ FORMAT_LINES_PER_PAGE)、デフォルトでは$ =は60になります。

レポートフッターを定義する

$ ^または$ FORMAT_TOP_NAMEには現在のヘッダー形式の名前が含まれていますが、フッターに対して同じことを自動的に行う対応するメカニズムはありません。固定サイズのフッターがある場合は、各write()の前に変数$-または$ FORMAT_LINES_LEFTをチェックしてフッターを取得し、必要に応じて次のように定義された別の形式を使用してフッターを自分で印刷できます。

format EMPLOYEE_BOTTOM =
End of Page @<
            $%
.

フォーマットに関連する変数の完全なセットについては、Perlの特殊変数のセクションを参照してください。