ページタイトル、改ページ、空行

このドキュメントでは、レポートの改ページを制御する方法、各レポートページの先頭にページタイトルを出力する方法、および出力レポートに空行を追加する方法について説明します。

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


デフォルトのページタイトル

DISPLAY または WRITE ステートメントによるページ出力ごとに、Natural によって自動的に単一のデフォルトタイトル行が生成されます。このタイトル行には、ページ番号、日付、および時刻が含まれています。

例:

WRITE 'HELLO'  
END

上記のプログラムでは、以下のようにデフォルトのページタイトルを含む出力が作成されます。

Page      1                                                  04-12-14  13:19:33
                                                                               
HELLO                                                                         

ページタイトルの省略 - NOTITLE オプション

ページタイトルなしでレポートを出力する場合は、キーワード NOTITLEDISPLAY または WRITE ステートメントに追加します。

例 - NOTITLE を指定した DISPLAY:

** 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

例 - NOTITLE を指定した WRITE:

WRITE NOTITLE 'HELLO'  
END

上記のプログラムでは、以下のようにページタイトルを含まない出力が作成されます。

HELLO                                                                          

独自ページタイトル定義 - WRITE TITLE ステートメント

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                                                                         

SKIPWRITE 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-NUMBERWRITE 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 パラメータ

パラメータ 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(ページ換え)を使用して、ページ換えを実行するかどうかを指定します。デフォルトでは EJ=ON が適用され、指定に従ってページ換えが実行されます。

EJ=OFF を指定すると、改ページ情報は無視されます。これは、ページ換えを必要としないテスト実行時に用紙を節約するために役立ちます。

EJ パラメータは、次の例のように、システムコマンド GLOBALS を使用してセッションレベルで設定できます。

GLOBALS EJ=OFF

EJ パラメータの設定は、EJECT ステートメントによって上書きされます。

EJECT または NEWPAGE ステートメントで制御する改ページ

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

次ページにタイトルまたはヘッダーを生成しない改ページ

EJECT ステートメントでは、次のページにタイトル行またはヘッダー行を生成しないで改ページが行われます。ページ開始処理またはページ終了処理を実行せずにWRITE TRAILER または AT END OF PAGEWRITE TITLEAT TOP OF PAGE*PAGE-NUMBER などの処理を行わずに)新しい物理ページが開始されます。

EJECT ステートメントは EJ パラメータの設定を上書きします。

ページ終了処理およびページ開始処理を行う改ページ

NEWPAGE ステートメントでは、関連するページ終了処理およびページ開始処理とともに改ページが行われます。指定されている場合には、トレーラ行が表示されます。DISPLAY または WRITE ステートメント で NOTITLE オプションが指定されていない場合には(上記参照)、デフォルトまたはユーザー指定のタイトル行が新しいページに表示されます。

NEWPAGE ステートメントを使用しない場合、改ページは PS パラメータの設定によって自動的に制御されます。上記の「ページサイズ - PS パラメータ」を参照してください。

n 行より少ない行数が残っている場合のページ換えまたは新しいページ

NEWPAGE ステートメントおよび EJECT ステートメントのいずれにも WHEN LESS THAN n LINES LEFT オプションがあります。このオプションでは、行数(n)を指定します。NEWPAGE および EJECT ステートメントは、ステートメント処理時に現在のページの使用可能行数が n 行より少ない場合に実行されます。

例 1

FORMAT PS=55 
... 
NEWPAGE WHEN LESS THAN 7 LINES LEFT 
...

この例では、ページサイズは 55 行に設定されています。

NEWPAGE ステートメントの処理時に現在のページの残りの行数が 6 行以下の場合にのみ、NEWPAGE ステートメントが実行され、改ページが発生します。残りの行数が 7 行以上の場合、NEWPAGE ステートメントは実行されず、改ページも発生しません。改ページはその後、セッションパラメータ PS(Natural レポートのページサイズ)の設定に従って、55 行目の後に発生します。

例 2:

** 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 ステートメントは、ページの下に(アポストロフィで囲んだ)テキストを出力するために使用されます。

WRITE TRAILER 'THIS IS THE END OF THE PAGE'

ステートメントは、ページ終了条件が検出されたとき、または SKIPNEWPAGE ステートメントの結果として実行されます。

論理ページサイズの考慮事項

ページ終了条件は DISPLAY または WRITE ステートメント全体が処理されたでのみチェックされるため、論理ページサイズ(DISPLAY または WRITE ステートメントによって出力される行数)によっては、WRITE TRAILER ステートメントが実行される前に、出力ページの物理サイズを超過する可能性があります。

実際に物理ページの下にページトレーラが表示されるようにするには、PS セッションパラメータを使用して、論理ページサイズを物理ページサイズより少ない値に設定する必要があります。

ページトレーラの桁揃えと下線

デフォルトでは、ページトレーラはページの中央に位置付けられ、下線は付きません。

WRITE TRAILER ステートメントでは、互いに独立して使用可能な以下のオプションを指定できます。

オプション 効果
LEFT JUSTIFIED ページトレーラを左揃えで表示します。
UNDERLINED 行サイズの幅に下線が引かれます(Natural プロファイルおよびセッションパラメータ LS も参照)。デフォルトでは、タイトルにハイフン(-)で下線が引かれます。ただし、UC セッションパラメータを使用すると、下線用の文字として使用する他の文字を指定することができます(「タイトルおよびヘッダーの下線用の文字」を参照)。

以下の例は、WRITE TRAILER ステートメントの LEFT JUSTIFIED および UNDERLINED オプションの使用方法を示しています。

例 1

WRITE TRAILER LEFT JUSTIFIED UNDERLINED 'THIS IS THE END OF THE PAGE'

例 2:

** 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 ステートメント

SKIP ステートメントは、1 つまたは複数の空行を出力レポートに生成するために使用します。

例 1 - WRITE および DISPLAY とともに使用する SKIP:

** 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

例 2 - DISPLAY VERT とともに使用する SKIP:

** 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 ステートメントは、レポートの新しいページが始まるときに常に実行する処理を指定するために使用します。

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 ステートメントは、ページ終了条件が発生したときに常に実行される処理を指定するために使用します。

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            
            

その他の例

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