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

WRITE WORK FILE

WRITE WORK [FILE] work-file-number [VARIABLE] operand1

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

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

関連ステートメント:DEFINE WORK FILE | READ WORK FILE | CLOSE WORK FILE

関連機能グループ:「ワークファイル/PC ファイルの制御


機能

WRITE WORK FILE ステートメントは、物理順ワークファイルにレコードを書き込むために使用します。

このステートメントはバッチモードでのみ使用できます。

1 つのプログラム内または処理ループ内でワークファイルを作成し、そのファイルを後続の別の処理ループまたはプログラムで READ WORK FILE ステートメントを使用して読み取ることもできます。

注意:
Unicode およびコードページのサポートについては、『Unicode およびコードページのサポート』ドキュメントの「Windows、UNIX、および OpenVMS プラットフォーム上のワークファイルと出力ファイル」を参照してください。

Top of page

構文説明

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

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

注意:
ワークファイルタイプ ENTIRECONNECTION または TRANSFER を使用しているとき、operand1 のフォーマットを C または G にすることはできません。

構文要素の説明:

work-file-number
ワークファイル番号:

使用するワークファイル番号(Natural に定義されたもの)を指定します。

VARIABLE
可変エントリ:

同一ワークファイルに対し、異なる WRITE WORK FILE ステートメントで、異なるフィールドを持つレコードを書き込むことができます。 この場合、すべての WRITE WORK FILE ステートメントに VARIABLE を指定する必要があります。 外部ファイルに書き込まれるレコードは可変フォーマットです。

オペランドリストにダイナミック変数(WRITE WORK FILE ステートメントの異なる実行に対してサイズが変わる)が含まれている場合、VARIABLE エントリはすべての WRITE WORK FILE ステートメントに指定する必要があります。

変数インデックス範囲:

ワークファイルに配列を書き込む場合、配列に変数インデックス範囲を指定できます。 次に例を示します。

WRITE WORK FILE work-file-number VARIABLE #ARRAY (I:J)
operand1
フィールド:

operand1 では、ワークファイルに書き込むフィールドを指定します。 ワークファイルに書き込むフィールドには、データベースフィールド、ユーザー定義変数、または READ WORK FILE ステートメントを使用して別のワークファイルから読み取ったフィールドを指定できます。

データベースの配列は、ワークファイルに書き込むオカレンスを示すインデックスの単一範囲で参照できます。 データベースファイルのグループは、グループ名で参照できます。 グループに属するすべてのデータベースフィールドがワークファイルに書き込まれます。

Top of page

フィールドの外部表示

WRITE WORK FILE ステートメントで書き込まれるフィールドは、その内部定義に従って外部ファイルに表示されます。 フィールド値は編集されません。

A および B フォーマットのフィールドについては、外部ファイルでのバイト数は、Natural プログラムで定義された内部長さ定義と同じです。 値は編集されず、小数点は表示されません。

N フォーマットのフィールドについては、外部ファイルでのバイト数は、小数点の前後の内部桁数の合計です。 小数点は外部ファイルには表示されません。

P フォーマットのフィールドについては、外部ファイルでのバイト数は、小数点の前後の桁数の合計に 1(符号用)を加算し、それを 2 で割ってバイト単位に切り上げたものです。

注意:
フォーマット変換は、ワークファイルに書き込まれるフィールドに対しては行われません。

フィールド表現の例:

フィールド定義 出力レコード
#FIELD1 (A10) 10 バイト
#FIELD2 (B15) 15 バイト
#FIELD3 (N1.3) 4 バイト
#FIELD4 (N0.7) 7 バイト
#FIELD5 (P1.2) 2 バイト
#FIELD6 (P6.0) 4 バイト

注意:
数値フィールド(フォーマット N または P)に対する Natural システム関数 AVERNAVERSUM、または TOTAL をワークファイルに書き込むとき、これらのフィールドの内部長は 1 桁拡張されます(例:フォーマット P3 のフィールドの SUM は P4 に拡張されます)。 これにより、ワークファイルを読み取るときに注意する必要があります。

Top of page

ラージおよびダイナミック変数の処理

ワークファイルタイプ 処理

ASCII
ASCII-COMPRESSED
SAG(バイナリ)

ワークファイルタイプ ASCII、ASCII-COMPRESSED、および SAG(バイナリ)では、ダイナミック変数は処理できず、エラーが生成されます。 ただし、最大フィールド/レコード長が 32766 バイトのラージ変数は処理できます。

ENTIRECONNECTION

ワークファイルタイプ ENTIRE CONNECTION では、ダイナミック変数は処理できません。 ただし、このタイプでは、最大フィールド/レコード長が 1073741824 バイトのラージ変数を処理できます。

PORTABLE
UNFORMATTED

2 つのワークファイルタイプ PORTABLE と UNFORMATTED を使用して、ラージおよびダイナミック変数をワークファイルに書き込んだりワークファイルから読み取ったりできます。 これらのタイプには、ダイナミック変数に対するサイズ制限がありません。 ただし、ラージ変数は最大フィールド/レコード長の 32766 バイトを超えることはできません。

ワークファイルタイプ PORTABLE の場合は、フィールド情報がワークファイル内に保存されます。 レコード内のフィールドサイズが現在のサイズと異なる場合は、ダイナミック変数は READ 中にサイズ変更されます。

WRITE WORK FILE ステートメントでは、フィールドは、そのバイト長で指定されたファイルに書き込まれます。 すべてのデータタイプ(DYNAMIC であるかどうかに関わらず)は同じように扱われます。 構造情報は挿入されません。 Natural ではバッファリングメカニズムを使用するので、データが完全に書き込まれるのは CLOSE WORK の後のみであることが予測できます。 これは、Natural の稼働中にファイルが別のユーティリティで処理される場合に特に重要です。

READ WORK FILE ステートメントでは、固定長のフィールドは、その全体の長さで読み込まれます。 ファイルの終わりに到達すると、現在のフィールドの残りは空白で埋められます。 次のフィールドは変更されません。 データタイプが DYNAMIC の場合、ファイルが 1073741824 バイトを超えない限り、ファイルの残りの部分がすべて読み込まれます。 ファイルの終わりに到達すると、残りのフィールド(変数)は変更されないまま維持されます(通常の Natural の動作)。

CSV ダイナミックおよびラージ変数の最大フィールド/レコード長は 32766 バイトです。 ダイナミック変数がサポートされます。 X-array は許可されていないので、エラーメッセージが表示されます。

Top of page

** Example 'WWFEX1': WRITE WORK FILE                                    
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
END-DEFINE                                                              
*                                                                       
FIND EMPLOY-VIEW WITH CITY = 'LONDON'                                   
  WRITE WORK FILE 1                                                     
        PERSONNEL-ID NAME                                              
END-FIND                                                                
*                                                                       
END                                                                    

Top of page