このドキュメントでは、次のトピックについて説明します。
関連ステートメント:CLOSE WORK
FILE
| DEFINE WORK
FILE
| WRITE WORK
FILE
関連機能グループ:ワークファイル/PC ファイルの制御
READ WORK FILE
ステートメントは、Adabas 以外の物理順ワークファイルからデータを読み取るために使用します。データはワークファイルから順次読み取られます。データがどのように読み取られるかは、そのデータがワークファイルにどのように書き込まれたということとは無関係です。
READ WORK FILE
は、ワークファイルの全レコードを読み取るための処理ループを開始し、実行します。READ WORK FILE
ループでは自動ブレイク処理を行うことができます。
注意:
READ WORK FILE
ステートメントの実行中にエンドオブファイル条件になると、Natural はワークファイルを自動的にクローズします。
READ WORK FILE
処理ループ内に I/O ステートメントを指定しないでください。
ASCII ワークファイルを読み取る場合、最後の物理レコードの後に最後のレコードとして空のレコードが返されることがあります。Natural は個々のレコードを読み取るわけではなく、ファイルアクセスパフォーマンスを最適化するためにワークファイルのより大きなブロックを読み取るためです。
READ WORK [FILE ] work-file-number |
||||||||||||||||||||||
RECORD operand1 |
||||||||||||||||||||||
[AND ] [SELECT ]
|
operand2 | |||||||||||||||||||||
operand2 | operand4 [AND ] ADJUST [OCCURRENCES ]
|
|||||||||||||||||||||
[GIVING
LENGTH operand3]
|
||||||||||||||||||||||
statement | ||||||||||||||||||||||
END-WORK |
(structured mode only) | |||||||||||||||||||||
LOOP |
(reporting mode only) |
構文図で使用されている記号については、「構文記号」を参照してください。
READ WORK [FILE ] work-file-number ONCE |
||||||||||||||||||||||
RECORD operand1 |
||||||||||||||||||||||
[AND ] [SELECT ]
|
operand2 | |||||||||||||||||||||
operand2 | operand4 [AND ] ADJUST [OCCURRENCES ]
|
|||||||||||||||||||||
[GIVING
LENGTH operand3]
|
||||||||||||||||||||||
[AT [END ] [OF ] [FILE ] statement END-ENDFILE] (structured
mode only) |
||||||||||||||||||||||
AT [END ] [OF ] [FILE ] |
(reporting mode only) |
構文図で使用されている記号については、「構文記号」を参照してください。
オペランド | 構文要素 | フォーマット | オペランド参照 | ダイナミック定義 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 |
S | A | G | A | U | N | P | I | F | B | D | T | L | C | ○ | ○ | ||||
operand2 |
S | A | G | A | U | N | P | I | F | B | D | T | L | C | ○ | ○ | ||||
operand3 |
S | I | ○ | ○ | ||||||||||||||||
operand4 |
A | A | U | N | P | I | F | B | D | T | L | C | × | × |
「フィールド長」も参照してください。
構文要素の説明:
構文要素 | 説明 |
---|---|
work-file-number |
ワークファイル番号:
(Natural に定義した)読み取るワークファイルの番号。 |
ONCE |
ONCE オプション:
|
RECORD operand1 FILLER nX |
RECORD オプション:
レポーティングモードでは、レコードのレイアウトに対応するオペランドリスト( ストラクチャードモードまたは レコードに含まれているデータが Natural によってチェックおよび変換されることはありません。数値フィールド内に数値以外のデータが含まれていると、プログラムの異常終了を起こすので、ユーザーは正しくレコードレイアウトを記述する必要があります。Natural
によるチェックは行われないため、このオプションはシーケンシャルファイルのレコードを処理するには最も速い方法です。レコードが読み取られる前は、 下記の「RECORD オプションの使用方法の概要」を参照してください。 |
SELECT |
|
operand4 AND ADJUST
OCCURRENCES |
ADJUST 節:
完全な範囲(*)を持つ 1 次元 X-array を指定します。X-array は、読み取られたすべてのデータを受信するために必要なオカレンス数に合わせて拡張または削減されます。以下の「X-array の処理」を参照してください。 注意: |
GIVING LENGTH
operand3 |
GIVING LENGTH 節:
この節は、読み取るレコードの実際の長さを取得するために使用します。長さ(バイト数)は
ワークファイルが ワークファイルタイプ |
AT END OF FILE |
AT END OF FILE 節
この節は、
|
END-WORK |
READ WORK FILE ステートメントの終了:
処理ループのあるストラクチャードモードの場合、Natural の予約キーワード |
LOOP |
READ WORK FILE ステートメントの終了:
処理ループのあるレポーティングモードの場合、Natural のステートメント |
RECORD
オプションの使用方法の概要
RECORD オプションとの併用
|
コンパイル時に排除 | ランタイムに排除 | RECORD オプションが無視され、処理が SELECT モードに切り替わる
|
---|---|---|---|
ワークファイルタイプ ENTIRECONNECTION |
x | ||
ダイナミック変数 | x | ||
ワークファイルタイプ CSV |
x | ||
ワークファイルタイプ PORTABLE |
x | ||
ワークファイルタイプ ASCII 、ASCII-COMPRESSED 、CSV 、UNFORMATTED 、コードページはコンフィグレーションユーティリティ(変換が必要)で指定されるか、または 1 つ以上の Unicode フィールドが指定されている場合(フォーマット U のオペランド、変換が必要)
|
x |
オペランド定義テーブル内のフィールド長は次のように決定されます。
Format | データ長 |
---|---|
A、B、I、F | 入力レコード中のバイト数は、内部長さ定義と同じです。 |
N | 入力レコード中のバイト数は、小数点の前後の内部桁数の合計です。小数点と符号は、入力レコード中のバイト数には入りません。 |
P、D、T | 入力レコード中のバイト数は、小数点の前後の桁数の合計に 1(符号用)を加算し、それを 2 で割って切り上げたものです。 |
L | 1 バイトが使用されます。C フォーマットのフィールドについては、2 バイトが使用されます。 |
フィールド定義 | 入力レコード |
---|---|
#FIELD1 (A10) |
10 バイト |
#FIELD2 (B15) |
15 バイト |
#FIELD3 (N1.3) |
4 バイト |
#FIELD4 (N0.7) |
7 バイト |
#FIELD5 (P1.2) |
2 バイト |
#FIELD6 (P6.0) |
4 バイト |
『プログラミングガイド』の「ユーザー定義変数のフォーマットおよび長さ」も参照してください。
ワークファイルから配列を読み取る場合、配列に変数インデックス範囲を指定できます。例えば、次のようになります。
READ WORK FILE work-file-number #ARRAY (I:J)
ワークファイルタイプ | 処理 |
---|---|
ワークファイルタイプ
|
|
|
ワークファイルタイプ |
ワークファイルタイプ |
|
2 つのワークファイルタイプ
|
|
ダイナミックおよびラージ変数の最大フィールド/レコード長は 32766 バイトです。ダイナミック変数がサポートされます。X-array は許可されていないので、エラーメッセージが表示されます。 |
ADJUST
節が使用されていない場合、X-array は通常の配列と同じように扱われます。つまり、既存のオカレンスに挿入されます。
表に示すとおり、ADJUST
節を使用すると、完全な範囲(*)で指定された 1 次元 X-array が処理されます。
ワークファイルタイプ | 処理 |
---|---|
|
完全な範囲(*)で指定された 1 次元 X-array が展開され、残りのレコードからすべてのデータを受信します。 |
完全な範囲(*)で指定された 1 次元 X-array が展開され、残りのファイルからすべてのデータを受信します。 | |
X-array はサポートされていません。 |
** Example 'RWFEX1': READ WORK FILE ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME * 1 #RECORD 2 #PERS-ID (A8) 2 #NAME (A20) END-DEFINE * FIND EMPLOY-VIEW WITH CITY = 'STUTTGART' WRITE WORK FILE 1 PERSONNEL-ID NAME END-FIND * * ... * READ WORK FILE 1 RECORD #RECORD DISPLAY NOTITLE #PERS-ID #NAME END-WORK * END
#PERS-ID #NAME -------- -------------------- 11100328 BERGHAUS 11100329 BARTHEL 11300313 AECKERLE 11300316 KANTE 11500304 KLUGE 11500308 DIETRICH 11500318 GASSNER 11500343 ROEHM 11600303 BERGER 11600320 BLAETTEL 11500336 JASPER 11100330 BUSH 11500328 EGGERT
** Example 'RWFEX2': READ WORK FILE - ASCII with dynamic variable ******************************************************************** DEFINE DATA LOCAL 1 #DYNA (A) DYNAMIC END-DEFINE * DEFINE WORK FILE 1 TYPE 'ASCII' * WRITE WORK FILE 1 VARIABLE 'text1 text2 text3 ' WRITE WORK FILE 1 VARIABLE 'text4 text5' * READ WORK FILE 1 AND SELECT #DYNA DISPLAY *LENGTH(#DYNA) #DYNA (AL=40) /* /* Length: 18 Dyn.Var: 'text1 text2 text3' /* Length: 11 Dyn.Var: 'text4 text5' END-WORK * END
Page 1 11-07-15 09:21:09 LENGTH #DYNA ----------- ---------------------------------------- 18 text1 text2 text3 11 text4 text5
** Example 'RWFEX3': READ WORK FILE - Unformatted with dynamic variable ************************************************************************ DEFINE DATA LOCAL 1 #DYNA (A) DYNAMIC END-DEFINE * DEFINE WORK FILE 1 TYPE 'UNFORMATTED' * WRITE WORK FILE 1 VARIABLE 'text1 text2 text3 ' WRITE WORK FILE 1 VARIABLE 'text4 text5' * DEFINE WORK FILE 1 TYPE 'UNFORMATTED' * READ WORK FILE 1 AND SELECT #DYNA DISPLAY *LENGTH(#DYNA) #DYNA (AL=40) /* /* Length: 29 Dyn.Var: 'text1 text2 text3 text4 text5' END-WORK * END
Page 1 11-07-15 09:31:04 LENGTH #DYNA ----------- ---------------------------------------- 29 text1 text2 text3 text4 text5
** Example 'RWFEX4': READ WORK FILE - ASCII with X-array ** and ADJUST its occurrences ******************************************************************** DEFINE DATA LOCAL 1 #ARR (A6/1:*) 1 #OCC (I4) END-DEFINE * DEFINE WORK FILE 1 TYPE 'ASCII' * WRITE WORK FILE 1 VARIABLE 'text1 text2 text3 ' WRITE WORK FILE 1 VARIABLE 'text4 text5' * READ WORK FILE 1 AND SELECT #ARR(*) AND ADJUST OCCURRENCES #OCC := *OCCURRENCE(#ARR) DISPLAY #OCC #ARR(1:#OCC) /* /* Occurrences: 3 Array(*): 'text1', 'text2', 'text3' /* Occurrences: 2 Array(*): 'text4', 'text5' END-WORK * END
Page 1 11-07-15 09:36:13 #OCC #ARR ----------- ------ 3 text1 text2 text3 2 text4 text5
** Example 'RWFEX5': READ WORK FILE - Unformatted with X-array ** and ADJUST its occurrences ************************************************************************ DEFINE DATA LOCAL 1 #ARR (A6/1:*) 1 #OCC (I4) END-DEFINE * DEFINE WORK FILE 1 TYPE 'UNFORMATTED' * WRITE WORK FILE 1 VARIABLE 'text1 text2 text3 ' WRITE WORK FILE 1 VARIABLE 'text4 text5' * DEFINE WORK FILE 1 TYPE 'UNFORMATTED' * READ WORK FILE 1 AND SELECT #ARR(*) AND ADJUST OCCURRENCES #OCC := *OCCURRENCE(#ARR) DISPLAY #OCC #ARR(1:#OCC) /* /*Occurrences: 5 Array(*): 'text1', 'text2', 'text3', 'text4', 'text5' END-WORK * END
Page 1 11-07-15 09:41:25 #OCC #ARR ----------- ------ 5 text1 text2 text3 text4 text5