Perl-format

提供:Dev Guides
移動先:案内検索

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文字のスペース内で左揃えとして書き込まれ、その後は2つのスペースで書き込まれます。

フォーマットを呼び出してデータを書き込む

この形式の宣言を呼び出すには、書き込みキーワードを使用します-

write EMPLOYEE; #send to the output

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

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

レポートフッターの定義

最後の1つはフッターです。 ヘッダーと非常によく似ており、フッターを定義できます。フッターは各ページの後に書き込まれます。 ここでは、_TOPの代わりに_BOTTOMキーワードを使用します。

   format EMPLOYEE_BOTTOM =
   End of Page @<
               $%
   .

これにより、次の結果が得られます

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

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