1. 導入:なぜPRINT属性が必要なのか
メインフレームの業務において、帳票(レポート)出力は避けて通れない重要な機能です。しかし、プログラムで「ここで改ページしたい」「あと何行でページを切り替えるか」を細かく制御するのは非常に大変です。PL/Iの PRINT属性 を使うと、これらの面倒な制御を言語側が自動的にサポートしてくれます。この属性を理解することで、帳票出力プログラムの作成効率が劇的に向上します。
2. 基礎知識:PRINT属性とSTREAM出力
通常、ファイルを出力する際はデータをそのまま書き出しますが、STREAM OUTPUT PRINT ファイルとして定義すると、ファイルが「帳票用」として扱われます。
この属性の最大の特徴は、1カラム目に「制御文字」が自動付与されることです。これにより、物理プリンタに対して「ここで改行せよ」「ここでページを送れ」という命令を、プログラムから意識せずに送ることが可能になります。
3. 実装と解決策
PRINT属性を付与したファイルに対しては、PL/I特有のキーワードである PAGE や LINE を使用できます。
・PAGE: 強制的にページを改めます。
・LINE(n): 指定した行番号までスキップします。
これにより、行数カウントのロジックを自前で書く必要がなくなります。
4. サンプルプログラム
以下のコードは、PRINT属性を使用した基本的な帳票出力の例です。コピー&ペーストして、帳票制御の仕組みを確認してみてください。
/ 帳票出力サンプルプログラム /
TESTPROG: PROC OPTIONS(MAIN);
/ SYSLISTをPRINT属性付きで定義 /
DCL SYSLIST FILE STREAM OUTPUT PRINT;
OPEN FILE(SYSLIST);
/ 1ページ目の出力 /
PUT FILE(SYSLIST) EDIT('--- 帳票タイトル ---')(A);
PUT FILE(SYSLIST) SKIP; / 改行 /
/ LINE(5)で5行目まで移動させる /
PUT FILE(SYSLIST) LINE(5) EDIT('5行目から開始')(A);
/ ページ切り替え /
PUT FILE(SYSLIST) PAGE;
PUT FILE(SYSLIST) EDIT('2ページ目の内容')(A);
CLOSE FILE(SYSLIST);
END TESTPROG;
5. 応用・注意点
現代のシステム開発では、メインフレームの物理プリンタへ直接出力するケースは減り、PDFやWeb帳票への移行が進んでいます。その際、PAGE や LINE による制御をそのまま現代の帳票エンジンに移植しようとすると、設計の不整合が起きることがあります。
移行時には「行数制御」という概念そのものを、CSSの改ページ制御やPDFライブラリの出力ロジックに置き換える設計が必要です。また、デバッグ時にファイルの中身をダンプして見ると、1カラム目に制御コードが含まれていて文字化けしているように見えることがありますが、これは正常な動作ですので安心してください。

コメント