【COBOL】DISPLAY文完全ガイド|UPON句・WITH NO ADVANCING・編集項目・デバッグ・ログ出力の実践パターン

COBOLのDISPLAY文は画面・ログへの出力に使う基本命令です。単純な文字表示だけでなく、UPON句による出力先の切り替えWITH NO ADVANCINGによる改行抑制編集項目を使ったフォーマット出力まで活用することで、バッチ処理のログ出力や対話的な入力プロンプトを実装できます。

この記事ではDISPLAY文の完全な構文から、数値データの読みやすい表示・デバッグ活用・タイムスタンプ付きログ出力の実践パターンまで解説します。

この記事でわかること

  • DISPLAY文の完全な構文(複数項目・UPON句・WITH NO ADVANCING)
  • UPON句による出力先の切り替え(SYSOUT・CONSOLE・SYSERR)
  • WITH NO ADVANCINGで改行なしのプロンプト表示をする方法
  • PIC Z・編集項目を使って数値を読みやすく表示する方法
  • COMP/COMP-3変数をDISPLAYする際の注意点
  • バッチ処理のデバッグ・ログ出力・進捗表示の実践パターン
スポンサーリンク

DISPLAY文の完全な構文

DISPLAY文の基本構文は以下のとおりです。複数の項目をスペースなしで連結して1行に出力できます。

DISPLAY文の構文
DISPLAY {データ名 | リテラル} ...
    [UPON {SYSOUT | CONSOLE | SYSERR | デバイス名}]
    [WITH NO ADVANCING]
[END-DISPLAY].
説明
{データ名 | リテラル} 表示する項目。複数指定した場合はスペースなしで連結して1行に出力される
UPON 出力先 出力先のデバイスを指定。省略時はSYSOUT(標準出力)
WITH NO ADVANCING 末尾に改行を出力しない。次のDISPLAYやACCEPTが同じ行に続く
END-DISPLAY DISPLAYブロックの終端。WITH NO ADVANCINGと組み合わせる場合などに明示
DISPLAY文の基本的な書き方
       WORKING-STORAGE SECTION.
       01 WS-NAME        PIC X(20) VALUE '山田 太郎'.
       01 WS-DEPT        PIC X(10) VALUE '経理部'.
       01 WS-EMP-NO      PIC 9(6)  VALUE 100123.
       01 WS-SALARY      PIC 9(8)  VALUE 350000.

       PROCEDURE DIVISION.
      *--- リテラルのみ ---
           DISPLAY '処理を開始します'

      *--- リテラルとデータ名の混在 ---
           DISPLAY '社員番号: ' WS-EMP-NO

      *--- 複数項目を連結(スペースなし)---
           DISPLAY WS-NAME '(' WS-DEPT ')'
           *> 出力例: 山田 太郎(経理部  )

      *--- 数値データ ---
           DISPLAY '給与: ' WS-SALARY '円'

      *--- 空行を出力(スペースリテラル) ---
           DISPLAY SPACE

           STOP RUN.
DISPLAY文では複数項目がスペースなしで連結される
DISPLAY A B C と書くと、AとBとCの値がスペースなしに並んで出力されます。項目間にスペースを入れたい場合は、間にスペースのリテラル(' ')やSPACEを挟みます。またDISPLAY '文字列' 変数のように文字列リテラルとデータ名を自由に混在させられます。

UPON句で出力先を切り替える

UPON句を使うと出力先のデバイスを指定できます。標準出力・標準エラー・印刷など環境に応じて使い分けます。

指定 出力先 用途・備考
UPON SYSOUT 標準出力(デフォルト) IBM z/OSのJCL DD名SYSOUT・GnuCOBOLの標準出力
UPON CONSOLE オペレータコンソール z/OSではオペレータコンソールへ出力。バッチ運用での警告メッセージに使う
UPON SYSERR 標準エラー出力 GnuCOBOLなど対応環境ではstderrへ出力。エラーメッセージの分離に使う
UPON PRINTER プリンタ(方言) 一部のCOBOL実装でプリンタ出力をサポート。標準外
省略 デフォルト(SYSOUTと同等) ほとんどの場合はOUPON省略でSYSOUTに出力される
UPON句の使い方
       PROCEDURE DIVISION.
      *--- 標準出力(デフォルト・省略可)---
           DISPLAY '処理開始: ' WS-DATE UPON SYSOUT

      *--- エラー出力(GnuCOBOL・一部環境)---
           IF WS-ERROR-FLAG = 'Y'
               DISPLAY 'ERROR: ' WS-ERROR-MSG UPON SYSERR
           END-IF

      *--- オペレータコンソール(z/OS環境)---
      *    バッチ処理の重大エラーをオペレータに通知する
           IF WS-ABEND-FLAG = 'Y'
               DISPLAY 'ABEND: PAYROLL-CALC FATAL ERROR' UPON CONSOLE
           END-IF

           STOP RUN.
UPON句の指定はコンパイラ・環境依存
SYSOUT・CONSOLE・SYSERRの挙動はCOBOLの実装(IBM z/OS COBOL・GnuCOBOL・Micro Focus COBOL等)によって異なります。IBM z/OSではUPON SYSOUTがJCLのDD SYSOUT=*にルーティングされます。移植性が必要な場合はOUPON句を使わないか、環境変数で切り替える設計にしましょう。

WITH NO ADVANCINGで改行を抑制する

通常のDISPLAY文は末尾に改行(改行コード)を出力します。WITH NO ADVANCINGを指定するとその改行が抑制され、次の出力が同じ行に続きます。ACCEPT文と組み合わせた入力プロンプトに特に便利です。

WITH NO ADVANCINGの基本
       PROCEDURE DIVISION.
      *--- 通常: DISPLAY後に改行が入る ---
           DISPLAY '処理開始'
           DISPLAY '次の行'
      *> 出力:
      *> 処理開始
      *> 次の行

      *--- WITH NO ADVANCING: 改行が入らない ---
           DISPLAY '処理開始' WITH NO ADVANCING
           DISPLAY '→完了'
      *> 出力:
      *> 処理開始→完了

      *--- ACCEPT文と組み合わせた入力プロンプト ---
           DISPLAY '社員番号を入力してください: ' WITH NO ADVANCING
           ACCEPT WS-EMP-NO
      *> 出力:
      *> 社員番号を入力してください: ← カーソルがここに来る
           STOP RUN.
WITH NO ADVANCINGを使った対話的な入力画面
       WORKING-STORAGE SECTION.
       01 WS-ANSWER      PIC X(1).
          88 ANS-YES     VALUE 'Y' 'y'.
          88 ANS-NO      VALUE 'N' 'n'.
       01 WS-INPUT-DATE  PIC 9(8).
       01 WS-DEPT-CODE   PIC X(4).

       PROCEDURE DIVISION.
           DISPLAY '====================================='
           DISPLAY ' 月次処理 実行確認                  '
           DISPLAY '====================================='
           DISPLAY SPACE

      *--- プロンプト: 入力と同じ行に表示 ---
           DISPLAY '処理対象日付 (YYYYMMDD): '
               WITH NO ADVANCING
           ACCEPT WS-INPUT-DATE

           DISPLAY '部門コード (4桁)       : '
               WITH NO ADVANCING
           ACCEPT WS-DEPT-CODE

           DISPLAY SPACE
           DISPLAY '日付: ' WS-INPUT-DATE
               '  部門: ' WS-DEPT-CODE
           DISPLAY '上記で実行しますか? (Y/N): '
               WITH NO ADVANCING
           ACCEPT WS-ANSWER

           EVALUATE TRUE
               WHEN ANS-YES
                   DISPLAY '処理を開始します...'
                   PERFORM MAIN-PROCESS
               WHEN ANS-NO
                   DISPLAY '処理を中断しました'
               WHEN OTHER
                   DISPLAY '不正な入力です'
           END-EVALUATE
           STOP RUN.

数値データを読みやすく表示する(編集項目)

PIC 9の数値変数をそのままDISPLAYすると先頭ゼロが付いて読みにくくなります。編集項目(PIC ZやPIC $など)にMOVEしてからDISPLAYすることで、ゼロ抑制・カンマ区切り・通貨記号付きの表示ができます。

数値の表示と編集項目の比較
       WORKING-STORAGE SECTION.
       01 WS-COUNT      PIC 9(5)    VALUE 42.
       01 WS-AMOUNT     PIC 9(9)V99 VALUE 1234567.89.
       01 WS-NEGATIVE   PIC S9(7)V99 VALUE -9800.50.

      * 表示用編集項目
       01 ED-COUNT      PIC ZZZZZ.          *> ゼロ抑制(最大5桁)
       01 ED-AMOUNT     PIC ZZZ,ZZZ,ZZZ.99. *> カンマ区切り+小数2桁
       01 ED-AMOUNT-YEN PIC ¥ZZZ,ZZZ,ZZZ.  *> 円記号付き(環境依存)
       01 ED-NEGATIVE   PIC -ZZZ,ZZZ.99.   *> 符号付き

       PROCEDURE DIVISION.
      *--- 編集なしで表示(読みにくい)---
           DISPLAY 'カウント(そのまま): ' WS-COUNT
           *> カウント(そのまま): 00042

           DISPLAY '金額(そのまま)    : ' WS-AMOUNT
           *> 金額(そのまま)    : 000001234567.89

      *--- 編集項目にMOVEしてから表示 ---
           MOVE WS-COUNT  TO ED-COUNT
           MOVE WS-AMOUNT TO ED-AMOUNT
           MOVE WS-NEGATIVE TO ED-NEGATIVE

           DISPLAY 'カウント(ゼロ抑制): ' ED-COUNT
           *> カウント(ゼロ抑制):    42

           DISPLAY '金額(カンマ区切り): ' ED-AMOUNT
           *> 金額(カンマ区切り): 1,234,567.89

           DISPLAY '金額(符号付き)    : ' ED-NEGATIVE
           *> 金額(符号付き)    : -   9,800.50

           STOP RUN.
PIC記述 表示例 用途
PIC 9(5) 00042 先頭ゼロあり(内部数値)
PIC ZZZZZ 42 先頭ゼロをスペースに置換
PIC Z(5) 42 ZZZZZと同じ(繰り返し表記)
PIC ZZZ,ZZZ.99 1,234.56 カンマ区切り+小数2桁・ゼロ抑制
PIC -ZZZ,ZZZ.99 – 1,234.56 / + 1,234.56 符号を先頭に表示(負はマイナス)
PIC +ZZZ,ZZZ.99 +1,234.56 / -1,234.56 正負どちらも符号を表示
PIC *,***,***.99 ***1,234.56 先頭ゼロをアスタリスクに置換(小切手印刷)

COMP・COMP-3変数をDISPLAYする際の注意

COMP(2進数)やCOMP-3(パック10進)は内部的にバイナリ形式で格納されています。これらをDISPLAYすると、環境によっては文字化けや予期しない出力になることがあります。

COMP/COMP-3の表示と対処
       WORKING-STORAGE SECTION.
      * 内部形式変数(計算用)
       01 WS-BINARY      PIC 9(9)   COMP.    *> 2進数
       01 WS-PACKED      PIC 9(9)V99 COMP-3. *> パック10進
       01 WS-BINARY-S    PIC S9(9)  COMP.    *> 符号付き2進数

      * 表示用変数(DISPLAY形式)
       01 WS-DISP-9       PIC 9(9).
       01 WS-DISP-9V99    PIC 9(9)V99.
       01 ED-FORMATTED    PIC ZZZ,ZZZ,ZZZ.99.

       PROCEDURE DIVISION.
           MOVE 1234567    TO WS-BINARY
           MOVE 98765.43   TO WS-PACKED

      *--- NG: COMP/COMP-3をそのままDISPLAY ---
      *    環境によって文字化けや不正な値が出力される
      *    DISPLAY 'バイナリ: ' WS-BINARY   *> 環境依存
      *    DISPLAY 'パック  : ' WS-PACKED   *> 文字化けの可能性

      *--- OK: まずDISPLAY形式にMOVEしてからDISPLAY ---
           MOVE WS-BINARY TO WS-DISP-9
           DISPLAY 'バイナリ(変換後): ' WS-DISP-9
           *> バイナリ(変換後): 001234567

      *--- より読みやすくするには編集項目を使う ---
           MOVE WS-PACKED TO ED-FORMATTED
           DISPLAY 'パック(編集済)  : ' ED-FORMATTED
           *> パック(編集済)  :    98,765.43

           STOP RUN.
IBM z/OSではCOMP変数のDISPLAYが自動変換される場合がある
IBM z/OS COBOLではコンパイラオプションによってCOMP変数をDISPLAYしたとき自動的に数値表示に変換します。ただしGnuCOBOLやMicro Focus COBOLでは動作が異なる場合があります。移植性と可読性のためにCOMP/COMP-3変数は一度DISPLAY互換の変数にMOVEしてからDISPLAYするのが安全な習慣です。

バッチ処理環境でのDISPLAY文の動作

COBOLのバッチ処理ではDISPLAY文の出力がどこに行くかは実行環境で異なります。

環境 DISPLAY文の出力先
IBM z/OS(JCL) JCLのDD SYSOUT=*に出力。JCL上でDD名SYSOUTが未定義の場合は出力されない(またはジョブログ)
GnuCOBOL(Linux/Windows) 標準出力(stdout)に出力。UPON SYSERRでstderrに切り替え可能
Micro Focus COBOL 標準出力またはコンソールウィンドウ。アプリケーション種別(コンソール/Windowsアプリ)によって挙動が異なる
COBOLプログラムをサブルーチンとして呼ぶ場合 呼び元のプロセスの標準出力に出力される。WebアプリやAPIからCALLしている場合、DISPLAY出力が意図せずHTTPレスポンスに混入することがある

実践パターン

デバッグ用DISPLAYで変数の状態を確認する

バッチ処理のデバッグで最もよく使うのがDISPLAY文による変数値の確認です。本番では88レベルのデバッグフラグで制御するパターンが実用的です。

デバッグフラグでDISPLAYを制御する
       WORKING-STORAGE SECTION.
       01 WS-DEBUG-MODE  PIC X(1) VALUE 'N'.
          88 DEBUG-ON    VALUE 'Y'.
          88 DEBUG-OFF   VALUE 'N'.

       01 WS-COUNTER     PIC 9(7) VALUE 0.
       01 WS-AMOUNT      PIC 9(9)V99 COMP-3.
       01 WS-DISP-AMOUNT PIC 9(9)V99.

       PROCEDURE DIVISION.
      *--- 実行時にデバッグON/OFFを切り替え ---
      *    本番: MOVE 'N' TO WS-DEBUG-MODE
      *    開発: MOVE 'Y' TO WS-DEBUG-MODE
           MOVE 'Y' TO WS-DEBUG-MODE

           PERFORM PROCESS-LOOP

           STOP RUN.

       PROCESS-LOOP.
           ADD 1 TO WS-COUNTER

           IF DEBUG-ON
               MOVE WS-AMOUNT TO WS-DISP-AMOUNT
               DISPLAY 'DEBUG [' WS-COUNTER '] '
                       'AMOUNT=' WS-DISP-AMOUNT
           END-IF

           PERFORM CALC-PROCESS.

      *--- デバッグ専用の変数ダンプ段落 ---
       DUMP-VARIABLES.
           IF DEBUG-ON
               DISPLAY '====== VARIABLE DUMP ======'
               DISPLAY 'WS-COUNTER : ' WS-COUNTER
               MOVE WS-AMOUNT TO WS-DISP-AMOUNT
               DISPLAY 'WS-AMOUNT  : ' WS-DISP-AMOUNT
               DISPLAY 'WS-EOF     : ' WS-EOF-FLAG
               DISPLAY '=========================='
           END-IF.

タイムスタンプ付きのログ出力

バッチ処理では処理の開始・終了・進捗・エラーをタイムスタンプ付きでDISPLAYするパターンが標準的です。FUNCTION CURRENT-DATEと組み合わせて実装します。

タイムスタンプ付きログ出力の共通段落
       WORKING-STORAGE SECTION.
       01 WS-LOG-TIMESTAMP   PIC X(19).  *> YYYY-MM-DD HH:MM:SS
       01 WS-LOG-LEVEL       PIC X(5).
       01 WS-LOG-MSG         PIC X(120).
       01 WS-LOG-LINE        PIC X(150).
       01 WS-DT.
          05 WS-DT-YEAR      PIC X(4).
          05 WS-DT-MONTH     PIC X(2).
          05 WS-DT-DAY       PIC X(2).
          05 WS-DT-HOUR      PIC X(2).
          05 WS-DT-MIN       PIC X(2).
          05 WS-DT-SEC       PIC X(2).
          05 FILLER          PIC X(7).

       PROCEDURE DIVISION.
      *--- 処理開始ログ ---
           MOVE 'INFO ' TO WS-LOG-LEVEL
           MOVE 'バッチ処理 開始' TO WS-LOG-MSG
           PERFORM WRITE-LOG

      *--- エラーログ ---
           IF WS-ERROR-FLAG = 'Y'
               MOVE 'ERROR' TO WS-LOG-LEVEL
               MOVE WS-ERROR-MSG TO WS-LOG-MSG
               PERFORM WRITE-LOG
           END-IF

           STOP RUN.

      *--- 共通ログ出力段落 ---
       WRITE-LOG.
           MOVE FUNCTION CURRENT-DATE TO WS-DT

           STRING WS-DT-YEAR  DELIMITED BY SIZE '-'
                              DELIMITED BY SIZE
                  WS-DT-MONTH DELIMITED BY SIZE '-'
                              DELIMITED BY SIZE
                  WS-DT-DAY   DELIMITED BY SIZE ' '
                              DELIMITED BY SIZE
                  WS-DT-HOUR  DELIMITED BY SIZE ':'
                              DELIMITED BY SIZE
                  WS-DT-MIN   DELIMITED BY SIZE ':'
                              DELIMITED BY SIZE
                  WS-DT-SEC   DELIMITED BY SIZE
                  INTO WS-LOG-TIMESTAMP

           STRING '[' DELIMITED BY SIZE
                  WS-LOG-TIMESTAMP DELIMITED BY SIZE
                  '] ['            DELIMITED BY SIZE
                  WS-LOG-LEVEL     DELIMITED BY SPACE
                  '] '             DELIMITED BY SIZE
                  WS-LOG-MSG       DELIMITED BY SIZE
                  INTO WS-LOG-LINE

           DISPLAY WS-LOG-LINE.

バッチ処理の件数レポート出力

バッチ処理の終了時に処理件数・エラー件数・合計金額などをDISPLAYで出力するパターンです。編集項目を使ってカンマ区切りで読みやすく表示します。

処理終了時の件数レポート出力
       WORKING-STORAGE SECTION.
       01 WS-COUNTERS.
          05 WS-INPUT-CNT   PIC 9(7) VALUE 0.  *> 入力件数
          05 WS-OK-CNT      PIC 9(7) VALUE 0.  *> 正常処理件数
          05 WS-ERR-CNT     PIC 9(5) VALUE 0.  *> エラー件数
          05 WS-SKIP-CNT    PIC 9(5) VALUE 0.  *> スキップ件数

       01 WS-AMOUNTS.
          05 WS-TOTAL-AMT   PIC 9(13)V99 COMP-3. *> 合計金額

      * 編集項目(表示用)
       01 ED-INPUT-CNT    PIC ZZZ,ZZZ,ZZ9.
       01 ED-OK-CNT       PIC ZZZ,ZZZ,ZZ9.
       01 ED-ERR-CNT      PIC ZZZ,ZZ9.
       01 ED-SKIP-CNT     PIC ZZZ,ZZ9.
       01 ED-TOTAL-AMT    PIC ZZZ,ZZZ,ZZZ,ZZ9.99.

       PROCEDURE DIVISION.
           ...
           PERFORM PRINT-SUMMARY
           STOP RUN.

       PRINT-SUMMARY.
           MOVE WS-INPUT-CNT TO ED-INPUT-CNT
           MOVE WS-OK-CNT    TO ED-OK-CNT
           MOVE WS-ERR-CNT   TO ED-ERR-CNT
           MOVE WS-SKIP-CNT  TO ED-SKIP-CNT
           MOVE WS-TOTAL-AMT TO ED-TOTAL-AMT

           DISPLAY '==============================='
           DISPLAY '  処理結果サマリ               '
           DISPLAY '==============================='
           DISPLAY '入力件数  : ' ED-INPUT-CNT ' 件'
           DISPLAY '正常件数  : ' ED-OK-CNT    ' 件'
           DISPLAY 'エラー件数: ' ED-ERR-CNT   ' 件'
           DISPLAY 'スキップ  : ' ED-SKIP-CNT  ' 件'
           DISPLAY '-------------------------------'
           DISPLAY '合計金額  : ' ED-TOTAL-AMT ' 円'
           DISPLAY '==============================='

           IF WS-ERR-CNT > 0
               DISPLAY '警告: エラーが ' ED-ERR-CNT ' 件発生しました'
           END-IF.

UPON CONSOLEによるオペレータへの通知

IBM z/OSのバッチ処理では、通常のDISPLAYはジョブのSYSOUTに出力されますが、UPON CONSOLEを使うとオペレータコンソールにメッセージを送れます。重大エラーや手動介入が必要な場合に使います。

UPON CONSOLEによる重大エラー通知(z/OS環境)
       PROCEDURE DIVISION.
      *--- 通常処理ログはSYSOUTへ ---
           DISPLAY 'INFO: 処理開始 ' WS-TODAY UPON SYSOUT

           PERFORM MAIN-PROCESS

      *--- 重大エラーはオペレータコンソールへも通知 ---
           IF WS-FATAL-ERROR = 'Y'
               DISPLAY 'FATAL: PAYROLL-CALC ABEND - '
                       WS-ERROR-MSG
                       UPON CONSOLE
               DISPLAY 'FATAL: RETURN CODE = ' WS-RETURN-CODE
                       UPON CONSOLE
               MOVE 16 TO RETURN-CODE
               GOBACK
           END-IF

      *--- マウント待ちなど手動操作が必要なメッセージ ---
           DISPLAY 'WTOR: 月次テープをドライブ01に'
                   'セットしてENTERを押してください'
                   UPON CONSOLE

           STOP RUN.

よくある落とし穴と対策

DISPLAY文の中で算術演算はできない

DISPLAY '合計' WS-AMOUNT + 100のような書き方はCOBOLでは文法エラーになります(他言語のprintと違います)。

対策: 先にCOMPUTEやADDで計算してワーク変数に格納し、そのワーク変数をDISPLAYします。

NG/OKの比較
      *--- NG: DISPLAY文内で演算はできない ---
      *    DISPLAY '10年後: ' WS-AGE + 10   *> コンパイルエラー

      *--- OK: 先に計算してからDISPLAY ---
           COMPUTE WS-AGE-FUTURE = WS-AGE + 10
           DISPLAY '10年後: ' WS-AGE-FUTURE

COMP-3変数をそのままDISPLAYすると文字化けする

COMP-3(パック10進)は1バイトに2桁の数字を詰め込む内部形式です。EBCDIC環境(z/OS)でそのままDISPLAYすると制御文字として出力され、ログが読めなくなることがあります。

対策: MOVE WS-PACKED TO WS-DISPLAY-VARで一度DISPLAY互換変数に変換してからDISPLAYします。編集項目を使うと同時に読みやすくフォーマットできます。

PIC X変数の末尾スペースがDISPLAYに含まれる

PIC X(20)の変数に「山田」(4文字)を格納すると、残り16文字がスペースで埋まります。そのままDISPLAYすると「山田 」と末尾にスペースが16個付いて出力されます。

対策: 末尾スペースを除いて表示したい場合はFUNCTION TRIM(WS-NAME)を使うか、DELIMITED BY SPACEで出力範囲を制御します。または出力専用の変数にSTRINGで組み立ててからDISPLAYします。

大量のDISPLAYがバッチ性能を低下させる

ループ内でDISPLAY文を毎回実行すると、100万件処理なら100万回のI/Oが発生します。特にz/OSのSPOOLにはI/Oコストがあり、処理時間が数倍になるケースもあります。

ループ内のDISPLAYは件数を絞る
大量データを処理するバッチでは、DISPLAY文をループ内に書かないのが原則です。どうしても進捗を表示したい場合は「1000件ごとに1回表示」のように間引きます。エラー件数・処理件数の表示は処理終了後に1回だけまとめてDISPLAYするのが正しいパターンです。

WITH NO ADVANCINGの後にACCEPTを書き忘れる

WITH NO ADVANCINGで改行を抑制した後に何も入力を受け取らないと、次のDISPLAYが同じ行に続いて出力されてしまいます。プロンプト表示の意図で書いた場合は必ずACCEPT文とセットで使います。

対策: DISPLAY '入力: ' WITH NO ADVANCINGの直後には必ずACCEPT文を書きます。

よくある質問

QDISPLAYで日本語(漢字)は表示できますか?
Aコンパイラと実行環境が日本語(Shift-JIS・EUC-JP・EBCDIC漢字)をサポートしていれば表示できます。IBM z/OSではEBCDIC漢字(IBM DBCS)、GnuCOBOLではLinuxのロケール設定に依存します。ソースファイルの文字コードとコンパイラの文字コード設定を一致させる必要があります。文字コードが一致しない場合は文字化けが起きます。
QDISPLAYの出力をファイルにリダイレクトできますか?
ACOBOLのコードだけではDISPLAY出力をファイルに書き込む直接的な方法はありません。z/OSではJCLでDD SYSOUTをデータセットに振り向けることができます。GnuCOBOLではシェルで./program > output.logとリダイレクトするのが一般的です。COBOLプログラム内でファイルに書き込みたい場合は、WRITE文を使ってSEQUENTIAL FILEに出力します。
QDISPLAY文で改ページ(ページ区切り)はできますか?
A標準COBOLのDISPLAY文には改ページ機能はありません。帳票出力(プリンタ)の改ページには、ファイルへのWRITE文でAFTER ADVANCING PAGEを使います。WRITE report-record AFTER ADVANCING PAGEと書くとFFコード(フォームフィード)が出力されます。DISPLAY文は画面・SYSOUTへの出力向きで、帳票印刷にはREPORT WRITER機能やFILE WRITE文が向いています。
QDISPLAY文で出力した内容はACCEPT文で読み戻せますか?
Aできません。DISPLAYは出力専用、ACCEPTは入力専用です。DISPLAYした内容をプログラム内で参照したい場合は、DISPLAYに渡したデータ変数をそのままプログラム内で使い続けます。ACCEPTはキーボード(CONSOLE)やDD文(z/OS)から新しい入力を受け取ります。
QDISPLAY文は最大何文字まで出力できますか?
A標準COBOLには明確な上限規定はなく、コンパイラ実装によります。IBM z/OS COBOLでは1行の最大出力長は255バイト(または1024バイト、バージョン依存)です。GnuCOBOLでは環境変数COB_DISPLAY_PRINT_PIPEや実装によって異なります。長い出力が必要な場合は、STRINGで組み立てた変数(PIC X(200)など)をDISPLAYするか、複数のDISPLAYに分割します。

まとめ

DISPLAY文の使い方のポイントを整理します。

項目 方法 ポイント
基本 DISPLAY リテラル データ名 … 複数項目をスペースなしで連結して1行出力
出力先切替 UPON SYSOUT / CONSOLE / SYSERR 環境依存。z/OSではJCL DD名とリンク
改行抑制 WITH NO ADVANCING ACCEPTと組み合わせて入力プロンプトに使う
数値の整形 MOVE → 編集項目 → DISPLAY PIC Z・カンマ区切り・符号付きで読みやすく
COMP-3の表示 まずDISPLAY形式変数にMOVE パック10進をそのままDISPLAYすると文字化けの恐れ
ループ内のDISPLAY 間引くか処理後にまとめて出力 ループ毎のDISPLAYはI/O負荷になる

ACCEPT文と組み合わせた対話的な入力についてはACCEPT文完全ガイドをご覧ください。タイムスタンプ付きログで使うFUNCTION CURRENT-DATEの詳細は日付・時刻の扱い方完全ガイドを参照してください。