このドキュメントでは、レポートの改ページを制御する方法、各レポートページの先頭にページタイトルを出力する方法、および出力レポートに空行を追加する方法について説明します。
以下のトピックについて説明します。
DISPLAY または WRITE ステートメントによるページ出力ごとに、Natural によって自動的に単一のデフォルトタイトル行が生成されます。このタイトル行には、ページ番号、日付、および時刻が含まれています。
例:
WRITE 'HELLO' END
上記のプログラムでは、以下のようにデフォルトのページタイトルを含む出力が作成されます。
Page 1 04-12-14 13:19:33
HELLO
ページタイトルなしでレポートを出力する場合は、キーワード NOTITLE を DISPLAY または WRITE ステートメントに追加します。
** Example 'DISPLX20': DISPLAY (with NOTITLE) ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 CITY 2 NAME 2 FIRST-NAME END-DEFINE * READ (5) EMPLOY-VIEW BY CITY FROM 'BOSTON' DISPLAY NOTITLE NAME FIRST-NAME CITY END-READ END
プログラム DISPLX20 の出力:
NAME FIRST-NAME CITY -------------------- -------------------- -------------------- SHAW LESLIE BOSTON STANWOOD VERNON BOSTON CREMER WALT BOSTON PERREAULT BRENDA BOSTON COHEN JOHN BOSTON
WRITE NOTITLE 'HELLO' END
上記のプログラムでは、以下のようにページタイトルを含まない出力が作成されます。
HELLO
Natural のデフォルトページタイトルの代わりに独自のページタイトルを出力する場合は、WRITE TITLE ステートメントを使用します。
以下では次のトピックについて説明します。
WRITE
TITLE ステートメントで、タイトル用のテキストをアポストロフィで囲んで指定します。
WRITE TITLE 'THIS IS MY PAGE TITLE' WRITE 'HELLO' END
上述したプログラムにより、次の出力が生成されます。
THIS IS MY PAGE TITLE HELLO
WRITE TITLE ステートメントの SKIP オプションで、タイトル行のすぐ下に出力される空行の数を指定できます。キーワード SKIP の後に、挿入する空行の数を指定します。
WRITE TITLE 'THIS IS MY PAGE TITLE' SKIP 2 WRITE 'HELLO' END
上述したプログラムにより、次の出力が生成されます。
THIS IS MY PAGE TITLE
HELLO
SKIP は WRITE TITLE ステートメントの一部としてのみではなく、スタンドアロンステートメントとしても使用できます。
デフォルトでは、ページタイトルはページの中央に位置付けられ、下線は付きません。
WRITE
TITLE ステートメントでは、互いに独立して使用可能な以下のオプションを指定できます。
| オプション | 効果 |
|---|---|
LEFT JUSTIFIED |
ページタイトルを左揃えで表示します。 |
UNDERLINED |
タイトルを下線付きで表示します。行サイズの幅に下線が引かれます(Natural プロファイルおよびセッションパラメータ LS も参照)。デフォルトでは、タイトルにハイフン(-)で下線が引かれます。ただし、UC セッションパラメータを使用すると、下線用の文字として使用する他の文字を指定することができます(「タイトルおよびヘッダーの下線用の文字」を参照)。
|
以下の例は、LEFT JUSTIFIED および UNDERLINED オプションの効果を示しています。
WRITE TITLE LEFT JUSTIFIED UNDERLINED 'THIS IS MY PAGE TITLE' SKIP 2 WRITE 'HELLO' END
上述したプログラムにより、次の出力が生成されます。
THIS IS MY PAGE TITLE
-------------------------------------------------------------------------------
HELLO
レポートの新しいページが開始されるときには、常に WRITE
TITLE ステートメントが実行されます。
以下の例では、システム変数 *PAGE-NUMBER を WRITE TITLE ステートメントとともに使用して、タイトル行にページ番号を出力します。
** Example 'WTITLX01': WRITE TITLE (with *PAGE-NUMBER)
************************************************************************
DEFINE DATA LOCAL
1 VEHIC-VIEW VIEW OF VEHICLES
2 MAKE
2 YEAR
2 MAINT-COST (1)
END-DEFINE
*
LIMIT 5
*
READ VEHIC-VIEW
END-ALL
SORT BY YEAR USING MAKE MAINT-COST (1)
DISPLAY NOTITLE YEAR MAKE MAINT-COST (1)
AT BREAK OF YEAR
MOVE 1 TO *PAGE-NUMBER
NEWPAGE
END-BREAK
/*
WRITE TITLE LEFT JUSTIFIED
'YEAR:' YEAR 15X 'PAGE' *PAGE-NUMBER
END-SORT
END
プログラム WTITLX01 の出力:
YEAR: 1980 PAGE 1 YEAR MAKE MAINT-COST ----- -------------------- ---------- 1980 RENAULT 20000 1980 RENAULT 20000 1980 PEUGEOT 20000
論理ページは、Natural プログラムによって作成される出力です。物理ページは、出力が表示される端末画面です。または、出力がプリントされる用紙 1 枚の場合もあります。
論理ページのサイズは、Natural プログラムによって出力される行数で決定されます。
1 画面分より多い行数が出力された場合、論理ページは物理画面を超過し、残りの行は次の画面に表示されます。

注意:
画面の下に表示される情報(WRITE
TRAILER または AT END OF
PAGE ステートメントで作成される出力など)が次の画面に出力される場合は、下記で説明しているセッションパラメータ PS を使用して、論理ページのサイズを適宜に減らします。
パラメータ PS(Natural レポートのページサイズ)を使用して、レポートの論理ページ当たりの最大行数を指定します。
PS パラメータで指定した行数に達すると、改ページが発生します。ただし、NEWPAGE または EJECT ステートメントで改ページが制御されていない場合に限られます。下記の「EJ パラメータで制御する改ページ」を参照してください。
PS パラメータは、システムコマンド GLOBALS を使用してセッションレベルで設定するか、または以下のステートメントを使用してプログラム内で設定できます。
FORMAT PS=nn
DISPLAY (PS=nn)
WRITE (PS=nn)
WRITE TITLE (PS=nn)
WRITE TRAILER (PS=nn)
INPUT (PS=nn)
以下のいずれかの方法で改ページできます。
これらの方法について以下で説明します。
セッションパラメータ EJ(ページ換え)を使用して、ページ換えを実行するかどうかを指定します。デフォルトでは EJ=ON が適用され、指定に従ってページ換えが実行されます。
EJ=OFF を指定すると、改ページ情報は無視されます。これは、ページ換えを必要としないテスト実行時に用紙を節約するために役立ちます。
EJ パラメータは、次の例のように、システムコマンド GLOBALS を使用してセッションレベルで設定できます。
GLOBALS EJ=OFF
EJ パラメータの設定は、EJECT ステートメントによって上書きされます。
以下では次のトピックについて説明します。
EJECT ステートメントでは、次のページにタイトル行またはヘッダー行を生成しないで改ページが行われます。ページ開始処理またはページ終了処理を実行せずに(WRITE TRAILER または AT END OF PAGE、WRITE TITLE、AT TOP OF PAGE、*PAGE-NUMBER などの処理を行わずに)新しい物理ページが開始されます。
EJECT ステートメントは EJ パラメータの設定を上書きします。
NEWPAGE ステートメントでは、関連するページ終了処理およびページ開始処理とともに改ページが行われます。指定されている場合には、トレーラ行が表示されます。DISPLAY または WRITE ステートメント で NOTITLE オプションが指定されていない場合には(上記参照)、デフォルトまたはユーザー指定のタイトル行が新しいページに表示されます。
NEWPAGE ステートメントを使用しない場合、改ページは PS パラメータの設定によって自動的に制御されます。上記の「ページサイズ - PS パラメータ」を参照してください。
NEWPAGE ステートメントおよび EJECT ステートメントのいずれにも WHEN LESS THAN
n LINES LEFT オプションがあります。このオプションでは、行数(n)を指定します。NEWPAGE および EJECT ステートメントは、ステートメント処理時に現在のページの使用可能行数が n 行より少ない場合に実行されます。
FORMAT PS=55 ... NEWPAGE WHEN LESS THAN 7 LINES LEFT ...
この例では、ページサイズは 55 行に設定されています。
NEWPAGE ステートメントの処理時に現在のページの残りの行数が 6 行以下の場合にのみ、NEWPAGE ステートメントが実行され、改ページが発生します。残りの行数が 7 行以上の場合、NEWPAGE ステートメントは実行されず、改ページも発生しません。改ページはその後、セッションパラメータ PS(Natural レポートのページサイズ)の設定に従って、55 行目の後に発生します。
** Example 'NEWPAX02': NEWPAGE (in combination with EJECT and
** parameter PS)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 CITY
2 NAME
2 JOB-TITLE
END-DEFINE
*
FORMAT PS=15
*
READ (9) EMPLOY-VIEW BY CITY STARTING FROM 'BOSTON'
AT START OF DATA
EJECT
WRITE /// 20T '%' (29) /
20T '%%' 47T '%%' /
20T '%%' 3X 'REPORT OF EMPLOYEES' 47T '%%' /
20T '%%' 3X ' SORTED BY CITY ' 47T '%%' /
20T '%%' 47T '%%' /
20T '%' (29) /
NEWPAGE
END-START
AT BREAK OF CITY
NEWPAGE WHEN LESS 3 LINES LEFT
END-BREAK
DISPLAY CITY (IS=ON) NAME JOB-TITLE
END-READ
END
NEWPAGE ステートメントでは、WITH TITLE オプションも使用できます。このオプションを使用しない場合、デフォルトタイトルが新しいページの先頭に表示されるか、または WRITE TITLE ステートメントや NOTITLE 節が実行されます。
NEWPAGE ステートメントの WITH
TITLE オプションにより、独自に選択したタイトルでこれらを上書きすることができます。WITH
TITLE オプションの構文は、WRITE
TITLE ステートメントと同じです。
NEWPAGE WITH TITLE LEFT JUSTIFIED 'PEOPLE LIVING IN BOSTON:'
以下のプログラムは、セッションパラメータ PS(Natural レポートのページサイズ)と NEWPAGE ステートメントの使用法を示しています。さらに、システム変数 *PAGE-NUMBER を使用して現在のページ番号を表示しています。
** Example 'NEWPAX01': NEWPAGE
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 CITY
2 DEPT
END-DEFINE
*
FORMAT PS=20
READ (5) VIEWEMP BY CITY STARTING FROM 'M'
DISPLAY NAME 'DEPT' DEPT 'LOCATION' CITY
AT BREAK OF CITY
NEWPAGE WITH TITLE LEFT JUSTIFIED
'EMPLOYEES BY CITY - PAGE:' *PAGE-NUMBER
END-BREAK
END-READ
END
プログラム NEWPAX01 の出力:
改ページの位置とタイトル行に注意してください。
Page 1 04-11-11 14:15:54
NAME DEPT LOCATION
-------------------- ------ --------------------
FICKEN TECH10 MADISON
KELLOGG TECH10 MADISON
ALEXANDER SALE20 MADISON
2 ページ目:
EMPLOYEES BY CITY - PAGE: 2
NAME DEPT LOCATION
-------------------- ------ --------------------
DE JUAN SALE03 MADRID
DE LA MADRID PROD01 MADRID
3 ページ目:
EMPLOYEES BY CITY - PAGE: 3
以下では次のトピックについて説明します。
WRITE
TRAILER ステートメントは、ページの下に(アポストロフィで囲んだ)テキストを出力するために使用されます。
WRITE TRAILER 'THIS IS THE END OF THE PAGE'
ステートメントは、ページ終了条件が検出されたとき、または SKIP や NEWPAGE ステートメントの結果として実行されます。
ページ終了条件は DISPLAY または WRITE ステートメント全体が処理された後でのみチェックされるため、論理ページサイズ(DISPLAY または WRITE ステートメントによって出力される行数)によっては、WRITE TRAILER ステートメントが実行される前に、出力ページの物理サイズを超過する可能性があります。
実際に物理ページの下にページトレーラが表示されるようにするには、PS セッションパラメータを使用して、論理ページサイズを物理ページサイズより少ない値に設定する必要があります。
デフォルトでは、ページトレーラはページの中央に位置付けられ、下線は付きません。
WRITE
TRAILER ステートメントでは、互いに独立して使用可能な以下のオプションを指定できます。
| オプション | 効果 |
|---|---|
LEFT JUSTIFIED |
ページトレーラを左揃えで表示します。 |
UNDERLINED |
行サイズの幅に下線が引かれます(Natural プロファイルおよびセッションパラメータ LS も参照)。デフォルトでは、タイトルにハイフン(-)で下線が引かれます。ただし、UC セッションパラメータを使用すると、下線用の文字として使用する他の文字を指定することができます(「タイトルおよびヘッダーの下線用の文字」を参照)。
|
以下の例は、WRITE TRAILER ステートメントの LEFT
JUSTIFIED および UNDERLINED オプションの使用方法を示しています。
WRITE TRAILER LEFT JUSTIFIED UNDERLINED 'THIS IS THE END OF THE PAGE'
** Example 'WTITLX02': WRITE TITLE AND WRITE TRAILER
************************************************************************
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
SKIP ステートメントは、1 つまたは複数の空行を出力レポートに生成するために使用します。
** Example 'SKIPX01': SKIP (in conjunction with WRITE and DISPLAY)
************************************************************************
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
'PEOPLE LIVING IN SALT LAKE CITY AS OF' *DAT4E 7X
'PAGE:' *PAGE-NUMBER
SKIP 3
*
READ (2) EMPLOY-VIEW WITH CITY = 'SALT LAKE CITY'
DISPLAY NAME / FIRST-NAME CITY ADDRESS-LINE (1)
SKIP 1
END-READ
END
** Example 'SKIPX02': SKIP (in conjunction with DISPLAY VERT)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 CITY
2 JOB-TITLE
END-DEFINE
*
READ (2) EMPLOY-VIEW WITH JOB-TITLE = 'SECRETARY'
DISPLAY NOTITLE VERT
NAME FIRST-NAME / CITY
SKIP 3
END-READ
*
NEWPAGE
*
READ (2) EMPLOY-VIEW WITH JOB-TITLE = 'SECRETARY'
DISPLAY NOTITLE
NAME FIRST-NAME / CITY
SKIP 3
END-READ
END
AT TOP OF
PAGE ステートメントは、レポートの新しいページが始まるときに常に実行する処理を指定するために使用します。
AT TOP OF PAGE 処理で何らかの出力が作成される場合、ページタイトルの下に、間にスキップした行をはさんで出力されます。
デフォルトでは、この出力は左揃えでページに表示されます。
** Example 'ATTOPX01': AT TOP OF PAGE
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 MAR-STAT
2 BIRTH
2 CITY
2 JOB-TITLE
2 DEPT
END-DEFINE
*
LIMIT 10
READ EMPLOY-VIEW BY PERSONNEL-ID FROM '20017000'
DISPLAY NOTITLE (AL=10)
NAME DEPT JOB-TITLE CITY 5X
MAR-STAT 'DATE OF/BIRTH' BIRTH (EM=YY-MM-DD)
/*
AT TOP OF PAGE
WRITE / '-BUSINESS INFORMATION-'
26X '-PRIVATE INFORMATION-'
END-TOPPAGE
END-READ
END
プログラム ATTOPX01 の出力:
-BUSINESS INFORMATION- -PRIVATE INFORMATION-
NAME DEPARTMENT CURRENT CITY MARITAL DATE OF
CODE POSITION STATUS BIRTH
---------- ---------- ---------- ---------- ---------- --------
CREMER TECH10 ANALYST GREENVILLE S 70-01-01
MARKUSH SALE00 TRAINEE LOS ANGELE D 79-03-14
GEE TECH05 MANAGER CHAPEL HIL M 41-02-04
KUNEY TECH10 DBA DETROIT S 40-02-13
NEEDHAM TECH10 PROGRAMMER CHATTANOOG S 55-08-05
JACKSON TECH10 PROGRAMMER ST LOUIS D 70-01-01
PIETSCH MGMT10 SECRETARY VISTA M 40-01-09
PAUL MGMT10 SECRETARY NORFOLK S 43-07-07
HERZOG TECH05 MANAGER CHATTANOOG S 52-09-16
DEKKER TECH10 DBA MOBILE W 40-03-03
AT END OF
PAGE ステートメントは、ページ終了条件が発生したときに常に実行される処理を指定するために使用します。
AT END OF PAGE 処理により何らかの出力が作成される場合、WRITE TRAILER ステートメントで指定したページトレーラの後に出力されます。
デフォルトでは、この出力は左揃えでページに表示されます。
上記で説明したページトレーラに関わる物理および論理ページサイズと DISPLAY または WRITE ステートメントで出力される行数の考慮事項は、AT END OF
PAGE 出力にも同様に適用されます。
** Example 'ATENPX01': AT END OF PAGE (with system function available
** via GIVE SYSTEM FUNCTIONS in DISPLAY)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 JOB-TITLE
2 SALARY (1)
END-DEFINE
*
READ (10) EMPLOY-VIEW BY PERSONNEL-ID = '20017000'
DISPLAY NOTITLE GIVE SYSTEM FUNCTIONS
NAME JOB-TITLE 'SALARY' SALARY(1)
/*
AT END OF PAGE
WRITE / 24T 'AVERAGE SALARY: ...' AVER(SALARY(1))
END-ENDPAGE
END-READ
END
プログラム ATENPX01 の出力:
NAME CURRENT SALARY
POSITION
-------------------- ------------------------- ----------
CREMER ANALYST 34000
MARKUSH TRAINEE 22000
GEE MANAGER 39500
KUNEY DBA 40200
NEEDHAM PROGRAMMER 32500
JACKSON PROGRAMMER 33000
PIETSCH SECRETARY 22000
PAUL SECRETARY 23000
HERZOG MANAGER 48500
DEKKER DBA 48000
AVERAGE SALARY: ... 34270
次の例のプログラムを参照してください。