【COBOL学習|実務向け】現場で差がつく!DISPLAY文の「NO ADVANCING」による出力制御術

1. 導入:なぜ今さらDISPLAY文なのか

COBOLのDISPLAY文は、誰もが最初に習う基本命令です。しかし、バッチ処理のログ出力や簡易的な帳票作成において、何気なく使っている「改行」の制御を意識するだけで、ログの見やすさや処理の効率は劇的に向上します。特に、大量のデータを追いかける際、無意味な改行でログが肥大化するのは現場のトラブルシューティングを困難にします。今回は、DISPLAY文をスマートに使いこなすためのTipsを解説します。

2. 基礎知識:DISPLAY文とバッファの仕組み

DISPLAY文は、指定したデータ項目の内容を標準出力(通常はログファイルやコンソール)へ書き出す命令です。COBOLの仕様上、通常はDISPLAYを実行するたびに「改行コード」が自動的に付与されます。

ここで重要なのがWITH NO ADVANCING句です。これを使うことで、OS側が持つ出力バッファに対して「改行コードを送らずに次の書き出しを待機せよ」という指示を出せます。これにより、複数の情報を一行に連結して出力することが可能になります。

3. 実装・解決策:出力先と改行のコントロール

実務では、単に画面に出すだけでなく、UPON句を用いて出力先を明確に分けるのがベテランの作法です。
UPON CONSOLE: 運用オペレータに即時通知したい場合
UPON SYSOUT/SYSLOG: 定常的なログとして残す場合

これらに「NO ADVANCING」を組み合わせることで、エラー発生時のステータスコードとメッセージを一行にまとめて出力するなど、ログの視認性を高める工夫が可能になります。

4. サンプルプログラム

以下は、処理の進捗を一行でカウントアップしながら表示する実用的なコード例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. DISP-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-COUNT PIC 9(03) VALUE 0.
PROCEDURE DIVISION.
DISPLAY “処理開始: ” WITH NO ADVANCING.
PERFORM VARYING WS-COUNT FROM 1 BY 1 UNTIL WS-COUNT > 5

  • NO ADVANCINGにより、改行せずに数値を追記していく

DISPLAY WS-COUNT ” ” WITH NO ADVANCING
END-PERFORM.

  • 最後に改行を入れるための空DISPLAY

DISPLAY ” “.
DISPLAY “処理完了”.
STOP RUN.

5. 応用・注意点:現場でのトラブル回避

注意点1:バッファリングの罠
NO ADVANCINGを使用した際、OSやミドルウェアの仕様によっては、明示的に改行(通常のDISPLAY)を行うまで出力がバッファに溜まったまま表示されないことがあります。リアルタイム性を重視するログ出力では、重要な区切りで必ず改行を入れる設計にしてください。

注意点2:文字化けと型変換
DISPLAYは内部データをそのままダンプするように出力します。数字項目や外部10進数(DISPLAY形式)をそのまま出すと、意図しない制御文字が混入することがあります。出力前には必ず英数字(PIC X)への再定義や、必要に応じた編集項目への変換を行うのが、バグを未然に防ぐ「データ操作の作法」です。

ログは「見やすさ」が保守コストを左右します。DISPLAY文一つとっても、用途に合わせて丁寧に使い分ける習慣をつけましょう。

コメント

タイトルとURLをコピーしました