このドキュメントでは、DISPLAY と WRITE ステートメントの機能を組み合わせて、フィールドの値を垂直表示する方法について説明します。
以下のトピックについて説明します。
垂直表示の作成には 2 つの方法があります。
「DISPLAY および WRITE ステートメント」で説明しているように、DISPLAY ステートメントは、通常、デフォルトヘッダー付きの列にデータを表示しますが、WRITE ステートメントはヘッダーなしでデータを横に表示します。
2 つのステートメントの機能を組み合わせて、フィールド値を垂直表示することができます。
DISPLAY ステートメントは、同じレコードの個々のフィールドの値を、フィールドごとに 1 列に、ページをまたがって出力します。各レコードのフィールドの値は、前のレコードの値の下に表示されます。
DISPLAY ステートメントの後に WRITE ステートメントを使用することによって、WRITE ステートメントで指定したテキストやフィールド値を、DISPLAY ステートメントで表示されるレコードの間に挿入できます。
以下のプログラムは、DISPLAY と WRITE の組み合わせを示しています。
** Example 'WRITEX04': WRITE (in combination with DISPLAY) ************************************************************************ DEFINE DATA LOCAL 1 VIEWEMP VIEW OF EMPLOYEES 2 NAME 2 JOB-TITLE 2 CITY 2 DEPT END-DEFINE * READ (3) VIEWEMP BY CITY STARTING FROM 'SAN FRANCISCO' DISPLAY NAME JOB-TITLE WRITE 22T 'DEPT:' DEPT SKIP 1 END-READ END
プログラム WRITEX04 の出力:
Page 1 04-11-11 14:15:55
NAME CURRENT
POSITION
-------------------- -------------------------
KOLENCE MANAGER
DEPT: TECH05
GOSDEN ANALYST
DEPT: TECH10
WALLACE SALES PERSON
DEPT: SALE20
前の例において、フィールド DEPT の位置はタブ表記 nT で決定します。この例の 20T の場合、画面の 20 桁目から表示が始まることを意味しています。
WRITE ステートメントで指定したフィールド値は、タブ表記 T*field を使用することによって、プログラムの最初の DISPLAY ステートメントで指定したフィールド値に自動的に揃えることができます。field は、前者のフィールドを揃える対象となる後者のフィールドの名前です。
以下のプログラムでは、WRITE ステートメントによる出力は、T*JOB-TITLE という表記を使用してフィールド JOB-TITLE に揃えられています。
** Example 'WRITEX05': WRITE (in combination with DISPLAY) ************************************************************************ DEFINE DATA LOCAL 1 VIEWEMP VIEW OF EMPLOYEES 2 NAME 2 JOB-TITLE 2 DEPT 2 CITY END-DEFINE * READ (3) VIEWEMP BY CITY STARTING FROM 'SAN FRANCISCO' DISPLAY NAME JOB-TITLE WRITE T*JOB-TITLE 'DEPT:' DEPT SKIP 1 END-READ END
プログラム WRITEX05 の出力:
Page 1 04-11-11 14:15:55
NAME CURRENT
POSITION
-------------------- -------------------------
KOLENCE MANAGER
DEPT: TECH05
GOSDEN ANALYST
DEPT: TECH10
WALLACE SALES PERSON
DEPT: SALE20
DISPLAY および WRITE ステートメントを連続して使用し、WRITE ステートメントで複数行が出力される場合、x/y(数字スラッシュ数字)表記を使用して、表示する行および列を指定できます。位置指定表記は、DISPLAY または WRITE ステートメントの次の要素を最後の出力の x 行下の y 桁目から開始します。
以下のプログラムは、この表記の使用法を示しています。
** Example 'WRITEX06': WRITE (with n/n)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 MIDDLE-I
2 ADDRESS-LINE (1:1)
2 CITY
2 ZIP
END-DEFINE
*
READ (3) VIEWEMP BY CITY STARTING FROM 'NEW YORK'
DISPLAY 'NAME AND ADDRESS' NAME
WRITE 1/5 FIRST-NAME
1/30 MIDDLE-I
2/5 ADDRESS-LINE (1:1)
3/5 CITY
3/30 ZIP /
END-READ
END
プログラム WRITEX06 の出力:
Page 1 04-11-11 14:15:55
NAME AND ADDRESS
--------------------
RUBIN
SYLVIA L
2003 SARAZEN PLACE
NEW YORK 10036
WALLACE
MARY P
12248 LAUREL GLADE C
NEW YORK 10036
KELLOGG
HENRIETTA S
1001 JEFF RYAN DR.
NEWARK 19711
Natural の標準の表示モードは水平方向です。
DISPLAY ステートメントの VERT 節オプションを使用すると、標準表示を上書きして、フィールドを垂直表示できます。
同じ DISPLAY ステートメントで使用できる HORIZ 節オプションは、標準の水平表示モードを再度有効にします。
垂直モードの列ヘッダーは、AS 節のさまざまなフォームで制御されます。以下のプログラム例は、DISPLAY
VERT ステートメントの使用法を示しています。
以下のプログラムでは AS 節を使用していません。つまり、列ヘッダーは出力されません。
** Example 'DISPLX09': DISPLAY (without column title) ************************************************************************ DEFINE DATA LOCAL 1 VIEWEMP VIEW OF EMPLOYEES 2 NAME 2 FIRST-NAME 2 CITY END-DEFINE * READ (3) VIEWEMP BY CITY STARTING FROM 'NEW YORK' DISPLAY VERT NAME FIRST-NAME / CITY SKIP 2 END-READ END
プログラム DISPLX09 の出力:
すべてのフィールド値が垂直方向に表示されることに注意してください。
Page 1 04-11-11 14:15:54 RUBIN SYLVIA NEW YORK WALLACE MARY NEW YORK KELLOGG HENRIETTA NEWARK
以下のプログラムには VERT および HORIZ 節が含まれており、一部の列の値が垂直方向に出力され、その他の値が水平方向に出力されます。さらに、AS CAPTIONED によってデフォルトの列ヘッダーが表示されます。
** Example 'DISPLX10': DISPLAY (with VERT as CAPTIONED and HORIZ clause)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 CITY
2 JOB-TITLE
2 SALARY (1:1)
END-DEFINE
*
READ (3) VIEWEMP BY CITY STARTING FROM 'NEW YORK'
DISPLAY VERT AS CAPTIONED NAME FIRST-NAME
HORIZ JOB-TITLE SALARY (1:1)
SKIP 1
END-READ
END
プログラム DISPLX10 の出力:
Page 1 04-11-11 14:15:54
NAME CURRENT ANNUAL
FIRST-NAME POSITION SALARY
-------------------- ------------------------- ----------
RUBIN SECRETARY 17000
SYLVIA
WALLACE ANALYST 38000
MARY
KELLOGG DIRECTOR 52000
HENRIETTA
以下のプログラムには AS
'text' 節が含まれており、指定した 'text' が列ヘッダーとして表示されます。
注意:DISPLAY ステートメントのテキスト要素内のスラッシュ(/)は行送りを発生させます。
** Example 'DISPLX11': DISPLAY (with VERT AS 'text' clause)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 CITY
2 JOB-TITLE
2 SALARY (1:1)
END-DEFINE
*
READ (3) VIEWEMP BY CITY STARTING FROM 'NEW YORK'
DISPLAY VERT AS 'EMPLOYEES' NAME FIRST-NAME
HORIZ JOB-TITLE SALARY (1:1)
SKIP 1
END-READ
END
プログラム DISPLX11 の出力:
Page 1 04-11-11 14:15:54
EMPLOYEES CURRENT ANNUAL
POSITION SALARY
-------------------- ------------------------- ----------
RUBIN SECRETARY 17000
SYLVIA
WALLACE ANALYST 38000
MARY
KELLOGG DIRECTOR 52000
HENRIETTA
AS 'text' CAPTIONED 節によって指定したテキストが列ヘッダーとして表示され、出力する各行のフィールド値の直前にデフォルトの列ヘッダーが表示されます。
以下のプログラムには、AS
'text' CAPTIONED 節が含まれています。
** Example 'DISPLX12': DISPLAY (with VERT AS 'text' CAPTIONED clause)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 CITY
2 JOB-TITLE
2 SALARY (1:1)
END-DEFINE
*
READ (3) VIEWEMP BY CITY STARTING FROM 'NEW YORK'
DISPLAY VERT AS 'EMPLOYEES' CAPTIONED NAME FIRST-NAME
HORIZ JOB-TITLE SALARY (1:1)
SKIP 1
END-READ
END
プログラム DISPLX12 の出力:
この節によって、デフォルトの列ヘッダー(NAME および FIRST-NAME)がフィールド値の前に出力されます。
Page 1 04-11-11 14:15:54
EMPLOYEES CURRENT ANNUAL
POSITION SALARY
------------------------------- ------------------------- ----------
NAME RUBIN SECRETARY 17000
FIRST-NAME SYLVIA
NAME WALLACE ANALYST 38000
FIRST-NAME MARY
NAME KELLOGG DIRECTOR 52000
FIRST-NAME HENRIETTA
DISPLAY
VERT ステートメントと後続の WRITE ステートメントを組み合わせて使用する場合、WRITE ステートメントでタブ表記 P*field-name を使用して、フィールド位置を DISPLAY VERT ステートメントで指定した特定のフィールドの列および行の位置に揃えることができます。
以下のプログラムでは、フィールド SALARY および BONUS が同じ列に表示され、1 番目の各行に SALARY、2 番目の各行に BONUS が表示されます。テキスト ***SALARY PLUS BONUS*** は SALARY に揃えられます。つまり、テキストは SALARY と同じ列の 1 番目の行に表示されます。一方、テキスト (IN US DOLLARS) は BONUS に揃えられるため、BONUS と同じ列の 2 番目の行に表示されます。
** Example 'WRITEX07': WRITE (with P*field)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 CITY
2 NAME
2 JOB-TITLE
2 SALARY (1:1)
2 BONUS (1:1,1:1)
END-DEFINE
*
READ (3) VIEWEMP BY CITY STARTING FROM 'LOS ANGELES'
DISPLAY NAME JOB-TITLE
VERT AS 'INCOME' SALARY (1) BONUS (1,1)
WRITE P*SALARY '***SALARY PLUS BONUS***'
P*BONUS '(IN US DOLLARS)'
SKIP 1
END-READ
END
プログラム WRITEX07 の出力:
Page 1 04-11-11 14:15:55
NAME CURRENT INCOME
POSITION
-------------------- ------------------------- ----------
SMITH 0
0
***SALARY PLUS BONUS***
(IN US DOLLARS)
POORE JR SECRETARY 25000
0
***SALARY PLUS BONUS***
(IN US DOLLARS)
PREPARATA MANAGER 46000
9000
***SALARY PLUS BONUS***
(IN US DOLLARS)
次の例のプログラムを参照してください。