このドキュメントでは、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)
次の例のプログラムを参照してください。