WRITE WORK FILE

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

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

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

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

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


関数

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

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

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

構文説明

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

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S A G  N 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 ステートメントを使用して別のワークファイルから読み取ったフィールドを指定できます。

ワークファイルに書き込むオカレンスを選択するために、配列の一部またはすべてを参照できます。

書き込まれるグループオペランド:

グループはグループ名で参照できます。参照されるグループに属するすべてのフィールドが、グループ内のフィールドの順序に従って、ワークファイルに書き込まれます。参照されるグループの再定義結果のフィールドは、ワークファイルには書き込まれません。参照されるグループが配列として定義されている場合、グループの個々のフィールドは定義順に配列としてワークファイルに書き込まれます。

グループ定義の場合

1 GROUP1 (1:3)
    2 FIELD1 (A2) 
    2 FIELD2 (A3)
  1 REDEFINE GROUP1
    2 FIELD3 (A15)

ステートメント

WRITE WORK FILE 1 GROUP1(*)

上記のコーディングと下記のコーディングは同等です。

WRITE WORK FILE 1 GROUP1.FIELD1(*) GROUP1.FIELD2(*)

ステートメント

WRITE WORK FILE 1 GROUP1.FIELD3

上記のコーディングと下記のコーディングは同等です。

WRITE WORK FILE 1 GROUP1.FIELD1(1) GROUP1.FIELD2(1)
                    GROUP1.FIELD1(2) GROUP1.FIELD2(2)
                    GROUP1.FIELD1(3) GROUP1.FIELD2(3)

フィールドの外部表示

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 に拡張されます)。これにより、ワークファイルを読み取るときに注意する必要があります。

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

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

ASCII
ASCII-COMPRESSED

ワークファイルタイプ ASCII および ASCII-COMPRESSED では、最大フィールド/レコード長が 32766 バイトのダイナミック変数およびラージ変数を処理できます。

SAG (バイナリ)

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

TRANSFER
ENTIRECONNECTION

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

PORTABLE
UNFORMATTED

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

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

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

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

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

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