DISPLAY および WRITE ステートメント

このドキュメントでは、DISPLAY および WRITE ステートメントを使用してデータを出力する方法および情報を出力するフォーマットを制御する方法について説明します。

以下のトピックについて説明します。


DISPLAY ステートメント

DISPLAY ステートメントでは列形式の出力が作成されます。つまり、1 つのフィールドの値が 1 つの列の下に縦に出力されます。複数のフィールドが出力される場合、つまり複数の列が作成される場合、これらの列は互いに隣り合って横に出力されます。

表示されるフィールドの順番は、DISPLAY ステートメントに指定したフィールド名の順番で決定されます。

以下のプログラムの DISPLAY ステートメントでは、従業員ごとに、最初に従業員番号、次に名前、その次に職種が表示されます。

** Example 'DISPLX01': DISPLAY
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 PERSONNEL-ID
  2 NAME
  2 BIRTH
  2 JOB-TITLE
END-DEFINE
*
READ (3) VIEWEMP BY BIRTH
  DISPLAY PERSONNEL-ID NAME JOB-TITLE
END-READ
END

プログラム DISPLX01 の出力:

Page      1                                                  04-11-11  14:15:54
 
PERSONNEL         NAME                  CURRENT
   ID                                  POSITION
--------- -------------------- -------------------------
 
30020013  GARRET               TYPIST
30016112  TAILOR               WAREHOUSEMAN
20017600  PIETSCH              SECRETARY

出力レポートに表示される列の順番を変更するには、DISPLAY ステートメントのフィールド名を単に並べ換えます。例えば、従業員名、職種、従業員番号の順番でリストする場合、適切な DISPLAY ステートメントは、以下のようになります。

** Example 'DISPLX02': DISPLAY
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 PERSONNEL-ID
  2 NAME
  2 BIRTH
  2 JOB-TITLE
END-DEFINE
*
READ (3) VIEWEMP BY BIRTH
  DISPLAY NAME JOB-TITLE PERSONNEL-ID
END-READ
END

プログラム DISPLX02 の出力:

Page      1                                                  04-11-11  14:15:54
 
        NAME                  CURRENT          PERSONNEL
                             POSITION             ID
-------------------- ------------------------- ---------
 
GARRET               TYPIST                    30020013
TAILOR               WAREHOUSEMAN              30016112
PIETSCH              SECRETARY                 20017600

ヘッダーが各列の上に出力されます。このヘッダーに影響するさまざまな方法については、『列ヘッダー』ドキュメントを参照してください。

WRITE ステートメント

WRITE ステートメントは、フリーフォーマット(列なし)の出力を作成するために使用します。DISPLAY ステートメントとは対照的に、WRITE ステートメントには以下が適用されます。

  • 必要に応じて、自動的に行送りを行います。つまり、現在の出力行に納まらないフィールドまたはテキスト要素は、自動的に次の行に出力されます。

  • ヘッダーは作成されません。

  • マルチプルバリューフィールドの値は、互いに隣り合って横に出力されます。縦には出力されません。

以下の 2 つのプログラム例は、DISPLAY ステートメントと WRITE ステートメントの基本的な違いを示しています。

垂直表示』ドキュメントの「DISPLAY と WRITE の組み合わせ」で説明しているように、2 つのステートメントを組み合わせて使用することもできます。

DISPLAY ステートメントの例

** Example 'DISPLX03': DISPLAY
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 NAME
  2 FIRST-NAME
  2 SALARY (1:3)
END-DEFINE
*
READ (2) VIEWEMP BY NAME STARTING FROM 'JONES'
  DISPLAY NAME FIRST-NAME SALARY (1:3)
END-READ
END

プログラム DISPLX03 の出力:

Page      1                                                  04-11-11  14:15:54
 
        NAME              FIRST-NAME        ANNUAL
                                            SALARY
-------------------- -------------------- ----------
 
JONES                VIRGINIA                  46000
                                               42300
                                               39300
JONES                MARSHA                    50000
                                               46000
                                               42700

WRITE ステートメントの例

** Example 'WRITEX01': WRITE
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 NAME
  2 FIRST-NAME
  2 SALARY (1:3)
END-DEFINE
*
READ (2) VIEWEMP BY NAME STARTING FROM 'JONES'
  WRITE NAME FIRST-NAME SALARY (1:3)
END-READ
END

プログラム WRITEX01 の出力:

Page      1                                                  04-11-11  14:15:55
 
JONES                VIRGINIA                  46000      42300      39300
JONES                MARSHA                    50000      46000      42700

列の間隔 - SF パラメータと nX 表記

デフォルトでは、DISPLAY ステートメントで出力される列は互いに 1 文字の空白で区切られます。

セッションパラメータ SF を使用すると、DISPLAY ステートメントで出力される列の間に挿入するデフォルトの空白文字数を指定できます。空白文字数は 1~30 の任意の値に設定できます。

パラメータは、FORMAT ステートメントを使用してレポート全体に適用するか、または DISPLAY ステートメントを使用して、要素レベルではなくステートメントレベルで指定することができます。

DISPLAY ステートメントの nX 表記で、2 つの列の間に挿入する空白文字数(n)を指定できます。nX 表記は、SF パラメータによる指定を上書きします。

** Example 'DISPLX04': DISPLAY (with nX)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 PERSONNEL-ID
  2 NAME
  2 BIRTH
  2 JOB-TITLE
END-DEFINE
*
FORMAT SF=3
READ (3) VIEWEMP BY BIRTH
  DISPLAY PERSONNEL-ID NAME 5X JOB-TITLE
END-READ
END

プログラム DISPLX04 の出力:

上記のプログラム例では、以下の出力が作成されます。最初の 2 つの列は FORMAT ステートメントの SF パラメータにより 3 文字の空白で区切られています。2 番目と 3 番目の列は、DISPLAY ステートメントの 5X 表記により 5 文字の空白で区切られています。

Page      1                                                  04-11-11  14:15:54
 
PERSONNEL           NAME                      CURRENT
   ID                                        POSITION
---------   --------------------     -------------------------
 
30020013    GARRET                   TYPIST
30016112    TAILOR                   WAREHOUSEMAN
20017600    PIETSCH                  SECRETARY

nX 表記は WRITE ステートメントでも使用可能であり、個々の出力要素間に空白を挿入します。

WRITE PERSONNEL-ID 5X NAME 3X JOB-TITLE

上記のステートメントでは、フィールド PERSONNEL-IDNAME の間に 5 文字の空白が挿入され、NAMEJOB-TITLE の間には 3 文字の空白が挿入されます。

タブ設定 - nT 表記

nT 表記は DISPLAY および WRITE ステートメントで使用可能であり、この表記を使用して出力要素を出力する位置を指定できます。

** Example 'DISPLX05': DISPLAY (with nT)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 NAME
  2 FIRST-NAME
END-DEFINE
*
READ (3) VIEWEMP BY NAME STARTING FROM 'JONES'
  DISPLAY 5T NAME 30T FIRST-NAME
END-READ
END

プログラム DISPLX05 の出力:

上記のプログラムでは、以下の出力が作成されます。フィールド NAME はページの左マージンから数えて 5 桁目から始まり、フィールド FIRST-NAME は 30 桁目から始まります。

Page      1                                                  04-11-11  14:15:54
 
            NAME                  FIRST-NAME
    --------------------     --------------------
 
    JONES                    VIRGINIA
    JONES                    MARSHA
    JONES                    ROBERT

行送り - スラッシュ表記

DISPLAY または WRITE ステートメントでスラッシュ(/)を使用すると、行送りを行うことができます。

  • DISPLAY ステートメントでは、スラッシュによりフィールド間およびテキスト内で行送りが行われます。

  • WRITE ステートメントでは、スラッシュがフィールド間に指定された場合にのみ行送りが行われます。テキスト内に指定された場合は、通常のテキスト文字と同様に処理されます。

フィールド間に指定する場合は、スラッシュの両側に空白が必要です。

行送りを複数回行う場合は、複数のスラッシュを指定します。

例1 - DISPLAY ステートメントの行送り:

** Example 'DISPLX06': DISPLAY (with slash '/')
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 NAME
  2 FIRST-NAME
  2 DEPARTMENT
END-DEFINE
*
READ (3) VIEWEMP BY NAME STARTING FROM 'JONES'
  DISPLAY NAME / FIRST-NAME 'DEPART-/MENT' DEPARTMENT
END-READ
END

プログラム DISPLX06 の出力:

上記の DISPLAY ステートメントでは、フィールド NAME の各値の後、およびテキスト DEPART-MENT 内で行送りが行われます。

Page      1                                                  04-11-11  14:15:54
 
        NAME         DEPART-
     FIRST-NAME       MENT
-------------------- -------
 
JONES                SALE
VIRGINIA
JONES                MGMT
MARSHA
JONES                TECH
ROBERT

例2 - WRITE ステートメントの行送り:

** Example 'WRITEX02': WRITE (with line advance)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 NAME
  2 FIRST-NAME
  2 DEPARTMENT
END-DEFINE
*
READ (3) VIEWEMP BY NAME STARTING FROM 'JONES'
  WRITE NAME / FIRST-NAME 'DEPART-/MENT' DEPARTMENT //
END-READ
END

プログラム WRITEX02 の出力:

上記の WRITE ステートメントでは、フィールド NAME の各値の後に 1 行、フィールド DEPARTMENT の各値の後に 2 行行送りが行われますが、テキスト DEPART-/MENT 内では行送りは行われません。

Page      1                                                  04-11-11  14:15:55
 
JONES
VIRGINIA             DEPART-/MENT SALE
 
 
JONES
MARSHA               DEPART-/MENT MGMT
 
 
JONES
ROBERT               DEPART-/MENT TECH

例3 - DISPLAY および WRITE ステートメントの行送り:

** Example 'DISPLX21': DISPLAY (usage of slash '/' in DISPLAY and WRITE)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
  2 CITY
  2 NAME
  2 FIRST-NAME
  2 ADDRESS-LINE (1)
END-DEFINE
*
WRITE TITLE LEFT JUSTIFIED UNDERLINED
       *TIME
   5X  'PEOPLE LIVING IN SALT LAKE CITY'
   21X 'PAGE:' *PAGE-NUMBER /
   15X 'AS OF' *DAT4E //
*
WRITE TRAILER UNDERLINED 'REGISTER OF' / 'SALT LAKE CITY'
*
READ (2) EMPLOY-VIEW WITH CITY = 'SALT LAKE CITY'
  DISPLAY  NAME /
           FIRST-NAME
           'HOME/CITY' CITY
           'STREET/OR BOX NO.' ADDRESS-LINE (1)
  SKIP 1
END-READ
END

プログラム DISPLX21 の出力:

14:15:54.6     PEOPLE LIVING IN SALT LAKE CITY                     PAGE:      1
               AS OF 11/11/2004


-------------------------------------------------------------------------------
        NAME                 HOME                STREET
     FIRST-NAME              CITY              OR BOX NO.
-------------------- -------------------- --------------------

ANDERSON             SALT LAKE CITY       3701 S. GEORGE MASON
JENNY

SAMUELSON            SALT LAKE CITY       7610 W. 86TH STREET
MARTIN

                                  REGISTER OF
                                SALT LAKE CITY
-------------------------------------------------------------------------------

DISPLAY および WRITE ステートメントの他の例

次の例のプログラムを参照してください。