READ
|
[WORK FILE ] work-file-number [ONCE ]
|
||||||||
RECORD operand1
|
|||||||||
[AND ] [SELECT ]
|
OFFSET n
|
operand2 | |||||||
FILLER nX
|
|||||||||
[GIVING LENGTH operand3]
|
|||||||||
AT [END ] [OF ] [FILE ]
|
|||||||||
statement | |||||||||
END-ENDFILE
|
|||||||||
statement | |||||||||
END -WORK
|
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
関連ステートメント: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 は個々のレコードを読み取るわけではなく、ファイルアクセスパフォーマンスを最適化するためにワークファイルのより大きなブロックを読み取るためです。
オペランド | 構文要素 | フォーマット | ステートメント参照 | ダイナミック定義 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 | S | A | G | A | U | N | P | I | F | B | D | T | L | C | G | 可 | 可 | |||
operand2 | S | A | G | A | U | N | P | I | F | B | D | T | L | C | 可 | 可 | ||||
operand3 | S | I | 可 | 可 |
ワークファイルタイプ ENTIRECONNECTION または TRANSFER を使用しているとき、operand2 のフォーマットを C にすることはできません。
「フィールド長」も参照してください。
構文要素の説明:
work-file-number |
ワークファイル番号:
(Natural に定義した)読み取るワークファイルの番号。 変数インデックス範囲:
ワークファイルから配列を読み取る場合、配列に変数インデックス範囲を指定できます。 次に例を示します。 READ WORK FILE work-file-number #ARRAY (I:J) |
|
---|---|---|
ONCE |
ONCE オプション:
|
|
RECORD operand1 FILLER nX |
RECORD オプション:
ストラクチャードモードまたは レコードに含まれているデータが Natural によってチェックおよび変換されることはありません。 数値フィールド内に数値以外のデータが含まれていると、プログラムの異常終了を起こすので、ユーザーは正しくレコードレイアウトを記述する必要があります。 Natural によるチェックは行われないため、このオプションはシーケンシャルファイルのレコードを処理するには最も速い方法です。 レコードが読み取られる前は、operand1 で定義したレコードエリアは空白で埋められます。 したがって、エンドオブファイル条件では空白のエリアが返されます。 短いレコードには空白が付加されます。 下記の「RECORD オプションの使用方法の概要」を参照してください。 |
|
SELECT |
SELECT オプション(デフォルト):
|
|
OFFSET n | OFFSET 0 は、レコードの先頭バイトを示します。
|
|
FILLER nX | 入力レコード内で n バイト分スキップすることを示します。 | |
Natural は、各フィールドに選択された値を割り当て、レコードから選択された数値フィールドに定義どおり正しい数値データが含まれているかをチェックします。 選択されたフィールドのチェックは Natural で行われるため、このオプションを使用すると、シーケンシャルファイルの処理にオーバーヘッドがかかります。 レコードが
ファイルタイプ CSV を読み取る場合、 |
||
GIVING LENGTH operand3 |
operand3 は、フォーマット/長さ I4 で定義する必要があります。 ワークファイルが ワークファイルタイプ CSV で |
|
AT END OF FILE |
|
|
END -WORK | READ WORK FILE ステートメントを終了するには、Natural 予約語 END-WORK を使用する必要があります。
|
RECORD オプションとの併用
|
コンパイル時に排除 | ランタイムに排除 | RECORD オプションが無視され、処理が SELECT モードに切り替わる
|
---|---|---|---|
ワークファイルタイプ ENTIRE CONNECTION | x | ||
ダイナミック変数 | x | ||
ワークファイルタイプ CSV | x | ||
ワークファイルタイプ PORTABLE | x | ||
ワークファイルタイプ ASCII、ASCII COMPRESSED、CSV、UNFORMATTED、コンフィグレーションユーティリティでコードページが指定されている場合(変換が必要)、または 1 つ以上の Unicode フィールドが指定されている場合(フォーマット U のオペランド、変換が必要) | x |
オペランド定義テーブル内のフィールド長は次のように決定されます。
フォーマット | 長さ |
---|---|
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 バイト |
『プログラミングガイド』の「ユーザー定義変数のフォーマットおよび長さ」も参照してください。
ワークファイルタイプ | 処理 |
---|---|
ASCII |
ワークファイルタイプ ASCII、ASCII-COMPRESSED、および SAG(バイナリ)では、ダイナミック変数は処理できず、エラーが生成されます。 ただし、最大フィールド/レコード長が 32766 バイトのラージ変数は処理できます。 |
ワークファイルタイプ ENTIRECONNECTION では、ダイナミック変数は処理できません。 ただし、このタイプでは、最大フィールド/レコード長が 107341824 バイトのラージ変数を処理できます。 どのダイナミック変数を使用する場合でも、 |
|
2 つのワークファイルタイプ PORTABLE と UNFORMATTED を使用して、ラージおよびダイナミック変数をワークファイルに書き込んだりワークファイルから読み取ったりできます。 これらのタイプには、ダイナミック変数に対するサイズ制限がありません。 ただし、ラージ変数は最大フィールド/レコード長の 32766 バイトを超えることはできません。 PORTABLE ワークファイルからダイナミック変数を読み取ると、保存されている長さへのサイズ変更が行われます。 |
|
CSV | ダイナミックおよびラージ変数の最大フィールド/レコード長は 32766 バイトです。 ダイナミック変数がサポートされます。 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