バージョン 4.2.5
 —  ステートメント  —

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 ステートメントと異なります。

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

Top of page

構文1 - 直接画面定義

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

'text' [(attributes)]

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

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

Top of page

構文 1 - 説明

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

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
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 にダウンロードされます。例 5 を参照してください。

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
BX ボックス定義 SE
CD カラー定義 SE
CV 制御変数 SE
DF 日付フォーマット SE
DL 出力の表示長 SE
DY ダイナミック属性 SE
EM 編集マスク SE
FL 浮動小数点仮数長 SE
IS 重複抑制 SE
LS 行サイズ S
MC マルチプルバリューフィールド数 S
MP レポートの最大ページ数 S
NL 出力の数値長 SE
PC ピリオディックグループ数 S
PM 出力モード SE
PS ページサイズ * S
SG 符号の位置 SE
UC 下線付き文字 S
ZP ゼロ出力 SE

* 配列のオカレンス数が PS 値を超えた場合は、NAT0303 エラーが出力されます。

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

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

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

DEFINE DATA LOCAL
1 VARI (A4)     INIT <'1234'>                  /*     Output 
END-DEFINE                                     /*    Produced
*                                              /*    ---------
WRITE           'Text'           VARI          /*    Text 1234
WRITE (PM=I)    'Text'           VARI          /*    Text 4321
WRITE           'Text' (PM=I)    VARI (PM=I)   /*    txeT 4321
WRITE           'Text' (PM=I)    VARI          /*    txeT 1234
END

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

出力フォーマット定義

nX        
nT        
x/y  

'text' [(attributes)]

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

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

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

nX
列の間隔:

この表記により、列の間に n 個のスペースが挿入されます。 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 では、内容がこの位置に書き込まれるフィールドを指定します。

実行時にオカレンス数を変更できる、範囲による配列は指定できません。

注意:
DL/I データベースの場合:DL/I AIX フィールドは、パラメータ PROCSEQ で指定した AIX とともに PCB を使用している場合にのみ表示できます。 それ以外の場合は、ランタイムに Natural によってエラーメッセージが返されます。

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

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

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

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

出力属性

attributes は、テキスト表示に使用される出力属性を示します。 可能な属性:

AD=AD-value
BX=BX-value
CD=CD-value
PM=PM-value

AD-value
CD-value

指定可能なセッションパラメータ値については、『パラメータリファレンス』ドキュメントの該当するセクションを参照してください。

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

Top of page

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

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

FORM

operand1 [operand2 ]
MAP

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

Top of page

構文 2 - 説明

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

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

構文要素の説明:

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

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

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

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

operand1
Form/Map 名:

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

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

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

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

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

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

NOTITLE および NOHDR については、WRITE ステートメントの構文 1 を参照してください。

Top of page

例 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  

Top of page