WRITE

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:AT END OF PAGE | AT TOP OF PAGE | CLOSE PRINTER | DEFINE PRINTER | DISPLAY | EJECT | FORMAT | NEWPAGE | PRINT | SKIP | SUSPEND IDENTICAL SUPPRESS | WRITE TITLE | WRITE TRAILER

関連機能グループ:出力レポートの作成


関数

WRITE ステートメントは、出力をフリーフォーマットで生成するために使用します。

WRITE ステートメントは、次の点で DISPLAY ステートメントと異なります。

  • 行あふれをサポートします。レポートの幅が 1 行を超過する場合、あふれたフィールド(またはテキスト)は次の行に書き出されます。フィールドやテキストが行をまたがって出力されることはありません。

  • デフォルトの列ヘッダーは出力されません。データの長さによって各フィールドの出力桁数が決まります。

  • 配列の値やオカレンスは縦出力ではなく、横に並べられます。

プログラミングガイド』の次のトピックも参照してください。

構文1 - 直接画面定義

WRITE [(rep)] [NOTITLE] [NOHDR]
  [(statement-parameters)]            
  nX

'text' [(attributes)]

nT 'c'(n) [(attributes)]
x/y ['='] operand1 [(parameters)]
T*field-name      
P*field-name      
/      

構文図で使用されている記号については、「構文記号」を参照してください。

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1   S A G N A U N P I F B D T L   G O ×

構文要素の説明:

構文要素 説明
(rep)
レポート指定:

プログラムで複数のレポートが生成される場合に、表記 (rep) を使用してレポートの ID を指定します。

レポート ID として、範囲 0 - 31 の値、または DEFINE PRINTER ステートメントを使用して割り当てた論理名を指定できます。

(rep) を指定しない場合、ステートメントは最初のレポート(レポート 0)に適用されます。

プリンタファイルが PC として Natural に定義されている場合、レポートは PC にダウンロードされます。「例 6」を参照してください。

Natural で作成される出力レポートの形式を制御する方法については、『プログラミングガイド』の「レポートフォーマットおよび制御」を参照してください。

NOTITLE
デフォルトページタイトルの省略:

Natural は、WRITE ステートメントによって出力される各ページに 1 行のタイトル行を生成します。このタイトルには、ページ番号と日時が含まれます。時刻はプログラム実行の開始時に設定されます。このデフォルトのタイトル行は WRITE TITLE ステートメントを使用して上書きできます。また、WRITE ステートメントに NOTITLE オプションを指定することにより省略することもできます。

例:

  • デフォルトタイトルが生成されます。

    WRITE NAME
  • ユーザータイトルが生成されます。

    WRITE NAME WRITE TITLE 'user-title'
  • タイトルは生成されません。

    WRITE NOTITLE NAME

注意:

  1. NOTITLE オプションを使用すると、同じオブジェクト内でデータを同じレポートに書き込むすべての DISPLAYPRINT、および WRITE ステートメントに適用されます。
  2. WRITE ステートメントの実行にページオーバーフローがチェックされます。WRITE ステートメントの実行にタイトルまたはトレイラ情報付きの新しいページが生成されることはありません。
NOHDR
列ヘッダーの省略:

WRITE ステートメント自体では、列ヘッダーは生成されません。ただし、WRITE ステートメントを DISPLAY ステートメントと組み合わせて使用する場合、WRITE ステートメントの NOHDR オプションを使用して、DISPLAY ステートメントによって生成される列ヘッダーを省略できます。NOHDR オプションは、WRITE ステートメントの実行によって新しいページが出力される場合にのみ有効です。

NOHDR オプションを使用しないと、この新しいページに DISPLAY ステートメントの列ヘッダー(存在する場合)が出力されます。NOHDR を使用すると、出力されません。

statement-parameters
ステートメントレベルでのパラメータ定義:

1 つまたは複数のパラメータをカッコで囲んで、ステートメントレベルで、つまり WRITE ステートメントの直後に指定できます。

指定した各パラメータは、以前に GLOBALS コマンド、SET GLOBALS ステートメント(レポーティングモードでのみ)、または FORMAT ステートメントで指定したパラメータを上書きします。

複数のパラメータを指定する場合は、個々のパラメータを 1 つ以上の空白で区切る必要があります。各パラメータ指定を 2 行のステートメント行に分割することはできません。

注意:
ここで適用されるパラメータ設定は、変数フィールドにのみ関連し、テキスト定数には影響しません。テキスト定数にフィールド属性を設定する場合は、この要素に属性を明示的に設定する必要があります(「要素(フィールド)レベルでのパラメータ定義」を参照)。

以下の項目も参照してください。

nX, nT, x/y, T*field-name, P*field-name, '=', /
フィールドの位置指定表記:

出力フォーマット定義」セクションの「フィールドの位置指定表記」を参照してください。

'text', 'c'(n), attributes, operand1, parameters
テキスト/属性割り当て:

出力フォーマット定義」セクションの「テキスト/属性割り当て」を参照してください。

パラメータのリスト

WRITE ステートメントで指定可能なパラメータ 指定(S = ステートメントレベル、E = 要素レベル
AD 属性定義 SE
AL 出力の英数字長 SE
CD カラー定義 SE
CV 制御変数 SE
DF 日付フォーマット SE
DL 出力の表示長 SE
DY ダイナミック属性 SE
EM 編集マスク SE
EMU Unicode 編集マスク E
FL 浮動小数点仮数長 SE
IS 重複抑制 SE
LS Line Size S
MC マルチプルバリューフィールド数 S
MP レポートの最大ページ数 S
NL 出力の数値長 SE
PC ピリオディックグループ数 S
PM Print Mode SE
PS ページサイズ * S
SG 符号の位置 SE
UC 下線付き文字 S
ZP ゼロ出力 SE

* PS セッションパラメータ設定は、配列のオカレンス数が PS 値を超える場合は考慮されません。

各セッションパラメータの詳細については、『パラメータリファレンス』を参照してください。

プログラミングガイド』の次のトピックも参照してください。

ステートメントおよび要素(フィールド)レベルでのパラメータ使用例

DEFINE DATA LOCAL
1 VARI (A4)     INIT <'1234'>                  /*     Output 
END-DEFINE                                     /*    Produced
*                                              /*    ---------
WRITE           'Text'           VARI          /*    Text 1234
WRITE (AD=U)    'Text'           VARI          /*    Text 1234
WRITE           'Text' (AD=U)    VARI (AD=U)   /*    Text 1234
WRITE           'Text' (AD=U)    VARI          /*    Text 1234
END

例 5 - ステートメント/要素(フィールド)レベルで '=' とパラメータを使用した WRITE ステートメント」も参照してください。

出力フォーマット定義

nX        
nT        
x/y  

'text' [(attributes)]

T*field-name   'c' (n) [(attributes)]
P*field-name   ['='] operand1[(parameters)]
/        

構文図で使用されている記号については、「構文記号」を参照してください。

フィールドの位置指定表記

構文要素 説明
nX
列の間隔:

この表記により、列の間に n 個のスペースが挿入されます。

例:

WRITE NAME 5X SALARY

以下の項目も参照してください。

nT
タブ設定:

nT 表記により、位置 n を出力するように位置指定(タブ設定)されます。後方への位置指定はできません。

次の例では、NAME は位置 25 から、SALARY は位置 50 から出力されます。

WRITE 25T NAME 50T SALARY

以下の項目も参照してください。

x/y
x/y 位置指定:

x/y 表記により、次の要素は最後のステートメント出力の x 行下、列 y の先頭に配置されます。y をゼロにすることはできません。同じ行で後方に位置指定することはできません。

位置指定表記 x/y」(『プログラミングガイド』)も参照してください。

T*field-name
フィールドの相対位置指定:

表記 T* では、前の DISPLAY ステートメントで使用したフィールドの指定出力桁に位置指定します。後方への位置指定はできません。

以下の項目も参照してください。

P*field-name
フィールドおよび行の相対位置指定:

表記 P* では、前の DISPLAY ステートメントで使用したフィールドの指定出力桁および行に位置指定します。縦出力モードと組み合わせてよく使用します。後方への位置指定はできません。

以下の項目も参照してください。

'='
フィールドヘッダーの後に位置するフィールド内容:

フィールドの前に配置した場合は、等号 '=' により、DEFINE DATA ステートメントまたは DDM の定義に従って、フィールドヘッダーはフィールド内容の前に表示されます。

以下の項目も参照してください。

/
行送り - スラッシュ表記:

フィールドまたはテキスト要素の間に配置した場合は、スラッシュ(/)により次の出力行の先頭に位置指定されます。

例:

WRITE NAME / SALARY

複数の行送りをするために、複数のスラッシュ(/)表記を使用できます。

以下の項目も参照してください。

テキスト/属性割り当て

構文要素 説明
'text'
テキスト割り当て:

一重引用符で囲まれた文字列が表示されます。

例:

WRITE 'EMPLOYEE' NAME 'MARITAL/STATUS' MAR-STAT

以下の項目も参照してください。

'c'(n)
文字の繰り返し:

フィールド値の直前に、一重引用符で囲まれた文字列が n 回表示されます。

例えば、次のようになります。

WRITE '*' (5) '=' NAME

結果

***** SMITH

テキスト表記」の「フィールド値の前に n 回表示される文字の定義」(『プログラミングガイド』)も参照してください。

attributes
フィールド表現と色属性:

テキスト/フィールド表示にさまざまな属性を割り当てることができます。これらの属性と構文については、以下の「出力属性」で説明します。

例:

WRITE 'TEXT' (BGR)
WRITE 'TEXT' (B)
WRITE 'TEXT' (BBLC)
operand1
書き込まれるフィールド:

operand1 では、内容がこの位置に書き込まれるフィールドを指定します。

parameters
要素(フィールド)レベルでのパラメータ定義:

1 つまたは複数のパラメータをカッコで囲んで、要素(フィールド)レベルで、つまり operand1 の直後に指定できます。この方法で指定した各パラメータは、以前にステートメントレベルGLOBALS コマンド、SET GLOBALS ステートメント(レポーティングモードでのみ)、または FORMAT ステートメントで指定した対応するパラメータを上書きします。

複数のパラメータを指定する場合は、各エントリ間に 1 つ以上の空白を配置する必要があります。エントリを 2 行のステートメント行に分割することはできません。

以下の項目も参照してください。

出力属性

attributes は、テキスト表示に使用される出力属性を示します。属性は次のいずれかです。

AD=ad-value
CD=cd-value
PM=pm-value

ad-value
cd-value

上記の意味は次に示すとおりです。

ad-value、、cd-value および pm-value は、『パラメータリファレンス』ドキュメントの関連セクションで記載されている、対応するセッションパラメータ AD、、CD および PM の可能な値を示します。

コンパイラは、実際には 1 つの出力フィールドに複数の属性値を受け入れます。例えば、次のように指定できます。AD=BDIただし、この場合は最後の値のみが適用されます。示した例では、値 I のみが有効になり、出力フィールドは強調表示されます。

英数字/Unicode 定数(Natural データフォーマット A または U )の場合は、ad-value または cd-value あるいはその両方を、それぞれの前に先行する CD= または AD= なしで、指定することができます。入力した単一の値が、最初にすべての可能な CD 値に対してチェックされます。例えば、IRE の値は、高輝度表示/赤として解釈されますが、高輝度表示/右詰め/必須としては解釈されません。単一の cd-value またはad-value の前に CD= または AD= が付いた値を組み合わせることはできません。

構文 2 - フォーム/マップ使用

WRITE [(rep)] [NOTITLE] [NOHDR] [USING ]

FORM

operand1 [operand2]
MAP

構文図で使用されている記号については、「構文記号」を参照してください。

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S       A                         × ×
operand2   S A G N A U N P I F B D T L       ×

構文要素の説明:

構文要素 説明
[USING] FORM [USING] MAP
定義済みフォーム/マップレイアウトの使用

このオプションを指定することで、あらかじめマップエディタで定義しておいたフォーム/マップレイアウトを使用できます。

WRITE ステートメントで使用するマップレイアウトでは、マップ出力ごとの自動的なページ換えは行われません。

LS パラメータはマップで定義した LS 設定よりも 1 バイト大きく指定する必要があります。

operand1
Form/Map 名:

operand1 は、使用するフォーム/マップの名前です。

operand2
書き込まれるフィールド:

operand2 は、出力するフィールドの名前です。

operand1 が定数で、operand2 が省略されている場合、コンパイル時にマップソースからフィールドが取り込まれます。

フィールドは、番号、シーケンス、フォーマット、長さ、オカレンス数(配列の場合)について、参照されているフォーム/マップに準拠している必要があります。そうでない場合、エラーが発生します。

NOTITLE/NOHDR
タイトル行/列ヘッダーの省略:

NOTITLE および NOHDR については、WRITE ステートメントの構文 1 で説明します。

例 1 - '='、'text'、'/' を使用した WRITE ステートメント

** Example 'WRTEX1': WRITE (with '=', 'text', '/')                      
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPL-VIEW VIEW OF EMPLOYEES                                           
  2 FULL-NAME                                                           
    3 FIRST-NAME                                                        
    3 MIDDLE-I                                                          
    3 NAME                                                              
  2 CITY                                                                
  2 COUNTRY                                                             
END-DEFINE                                                              
*                                                                       
LIMIT 1                                                                 
READ EMPL-VIEW BY NAME                                                  
  /*                                                                     
  WRITE NOTITLE                                                         
        '=' NAME '=' FIRST-NAME '=' MIDDLE-I //                         
        'L O C A T I O N' /                                             
        'CITY:   ' CITY    /                                            
        'COUNTRY:' COUNTRY //
  /*                         
END-READ                     
END

プログラム WRTEX1 の出力:

NAME: ABELLAN              FIRST-NAME: KEPA                 MIDDLE-I:       
                                                                            
L O C A T I O N                                                             
CITY:    MADRID                                                             
COUNTRY: E

例 2 - nX、nT 表記を使用した WRITE ステートメント

** Example 'WRTEX2': WRITE (with nX, nT notation)                       
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPL-VIEW VIEW OF EMPLOYEES                                           
  2 NAME                                                                
  2 JOB-TITLE                                                           
END-DEFINE                                                              
*                                                                       
LIMIT 4                                                                 
READ EMPL-VIEW BY NAME                                                  
  WRITE NOTITLE 5X NAME 50T JOB-TITLE                               
END-READ                                                                
END

プログラム WRTEX2 の出力:

ABELLAN                                     MAQUINISTA             
ACHIESON                                    DATA BASE ADMINISTRATOR
ADAM                                        CHEF DE SERVICE        
ADKINSON                                    PROGRAMMER

例 3 - T* 表記を使用した WRITE ステートメント

** Example 'WRTEX3': WRITE (with T* notation)                           
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPL-VIEW VIEW OF EMPLOYEES                                           
  2 NAME                                                                
  2 CITY                                                                
  2 SALARY (1)                                                          
END-DEFINE                                                              
*                                                                       
LIMIT 5                                                                 
READ EMPL-VIEW BY CITY STARTING FROM 'ALBU'                             
  DISPLAY NOTITLE CITY NAME SALARY (1)                                  
  AT BREAK CITY                                                         
    /*                                                                  
    WRITE / 'CITY AVERAGE:' T*SALARY (1) AVER(SALARY(1)) //       
    /*                                                                  
  END-BREAK                                                             
END-READ                                                                
END

プログラム WRTEX3 の出力:

        CITY                 NAME           ANNUAL  
                                            SALARY  
-------------------- -------------------- ----------
                                                    
ALBUQUERQUE          HAMMOND                   22000
ALBUQUERQUE          ROLLING                   34000
ALBUQUERQUE          FREEMAN                   34000
ALBUQUERQUE          LINCOLN                   41000
                                                    
CITY AVERAGE:                                  32750
                                                    
                                                    
ALFRETON             GOLDBERG                   4800
                                                    
CITY AVERAGE:                                   4800

例 4 - P* 表記を使用した WRITE ステートメント

** Example 'WRTEX4': WRITE (with P* notation)                           
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPL-VIEW VIEW OF EMPLOYEES                                           
  2 NAME                                                                
  2 CITY                                                                
  2 BIRTH                                                               
  2 SALARY (1)                                                          
END-DEFINE                                                              
*                                                                       
LIMIT 3                                                                 
READ EMPL-VIEW BY CITY FROM 'N'                                         
  DISPLAY NOTITLE NAME CITY                                             
          VERT AS 'BIRTH/SALARY' BIRTH (EM=YYYY-MM-DD) SALARY (1)       
  SKIP 1                                                                
  AT BREAK CITY                                                          
    WRITE  / 'CITY AVERAGE' P*SALARY (1) AVER(SALARY (1)) //       
  END-BREAK                                                             
END-READ                                                                
END

プログラム WRTEX4 の出力:

        NAME                 CITY           BIRTH   
                                            SALARY  
-------------------- -------------------- ----------
                                                    
WILCOX               NASHVILLE            1970-01-01
                                               38000
                                                    
MORRISON             NASHVILLE            1949-07-10
                                               36000
                                                    
                                                    
CITY AVERAGE                                   37000
                                                    
                                                    
BOYER                NEMOURS              1955-11-23
                                              195900
                                                    
                                                    
CITY AVERAGE                                  195900

例 5 - ステートメント/要素(フィールド)レベルで '=' とパラメータを使用した WRITE ステートメント

** Example 'WRTEX5': WRITE (using '=', statement/element parameters)    
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPL-VIEW VIEW OF EMPLOYEES                                           
  2 NAME                                                                
  2 PERSONNEL-ID                                                        
  2 PHONE                                                               
END-DEFINE                                                              
*                                                                       
LIMIT 2                                                                 
READ EMPL-VIEW BY NAME                                                  
  WRITE NOTITLE (AL=16 NL=8)                                            
        '=' PERSONNEL-ID '=' NAME '=' PHONE (AL=10 EM=XXX-XXXXXXX) 
END-READ                                                                
END

プログラム WRTEX5 の出力:

PERSONNEL ID: 60008339         NAME: ABELLAN          TELEPHONE: 435-6726
PERSONNEL ID: 30000231         NAME: ACHIESON         TELEPHONE: 523-341

例 6 - Natural に PC として定義された出力ファイルを使用したレポート指定

** Example 'PCDIEX1': DISPLAY and WRITE to PC                           
**                                                                      
** NOTE: Example requires that Natural Connection is installed.         
************************************************************************
DEFINE DATA LOCAL                                                       
01 PERS VIEW OF EMPLOYEES                                               
  02 PERSONNEL-ID                                                       
  02 NAME                                                               
  02 CITY                                                               
END-DEFINE                                                              
*                                                                       
FIND PERS WITH CITY = 'NEW YORK'               /* Data selection        
  WRITE (7) TITLE LEFT 'List of employees in New York' /                
  DISPLAY (7)          /* (7) designates the output file (here the PC).
    'Location'  CITY                                                    
    'Surname'   NAME                                                    
    'ID'        PERSONNEL-ID                                            
END-FIND                                                                
END