このドキュメントでは、DISPLAY および WRITE ステートメントを使用してデータを出力する方法および情報を出力するフォーマットを制御する方法について説明します。
以下のトピックについて説明します。
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 ステートメントは、フリーフォーマット(列なし)の出力を作成するために使用します。DISPLAY ステートメントとは対照的に、WRITE ステートメントには以下が適用されます。
必要に応じて、自動的に行送りを行います。つまり、現在の出力行に納まらないフィールドまたはテキスト要素は、自動的に次の行に出力されます。
ヘッダーは作成されません。
マルチプルバリューフィールドの値は、互いに隣り合って横に出力されます。縦には出力されません。
以下の 2 つのプログラム例は、DISPLAY ステートメントと WRITE ステートメントの基本的な違いを示しています。
『垂直表示』ドキュメントの「DISPLAY と WRITE の組み合わせ」で説明しているように、2 つのステートメントを組み合わせて使用することもできます。
** 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
** 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
デフォルトでは、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-ID と NAME の間に 5 文字の空白が挿入され、NAME と JOB-TITLE の間には 3 文字の空白が挿入されます。
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 ステートメントでは、スラッシュがフィールド間に指定された場合にのみ行送りが行われます。テキスト内に指定された場合は、通常のテキスト文字と同様に処理されます。
フィールド間に指定する場合は、スラッシュの両側に空白が必要です。
行送りを複数回行う場合は、複数のスラッシュを指定します。
** 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
** 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
** 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
-------------------------------------------------------------------------------
次の例のプログラムを参照してください。