連続レコード入出力

キーがないレコード ファイルのことを連続ファイルと呼びます。そのようなファイルのレコードは、書き込まれた順序でのみ読み取ることができます。したがって、連続ファイルのレコードは、ファイル内の最初のレコードから順番に 1 つずつしか読み取れません。連続ファイルのレコードは書き換え可能ですが、書き換えできるのは読み込まれた直後のみになります。

連続ファイルは、ENVIRONMENT 属性の CONSECUTIVE オプションを含めることで宣言します。次に例を示します。

DECLARE ULOG RECORD OUTPUT FILE 
        ENVIRONMENT(CONSECUTIVE RECSIZE(130));

この例では、RECSIZE オプションですべてのレコードの長さが 130 バイトに指定されています。RECSIZE を省略した場合は、可変長レコードが書き込まれることがあります。その場合、レコードの長さを示す情報はファイルに自動で記録されません。ファイルを読み取るプログラム側で、各 READ 文によって読み取るバイト数を特定できる必要があります。

例:

CONFILE: PROCEDURE OPTIONS(MAIN);

   DECLARE TEST RECORD OUTPUT FILE ENV(CONSECUTIVE); 
   DECLARE REC1 CHAR(5) INIT('AAAAA');
   DECLARE REC2 CHAR(10) INIT('BEEBBBBBBB');

   OPEN FILE(TEST) TITLE('testdata'); 
   WRITE FILE(TEST) FROM(REC1);
   WRITE FILE(TEST) FROM(REC2); 
   WRITE FILE(TEST) FROM(REC1); 
   CLOSE FILE(TEST);

END CONFILE;

このプログラムで得られる testdata ファイルには次の 20 バイトが含まれます。

AAAAABBBBBBBBBBAAAAA
注:

Open PL/I では、旧来の方法で同じ処理が可能です。その方法では、DECLARE 文の ENVIRONMENT 属性ではなく、OPEN 文の TITLE オプションを使用します。この方法を次に示します。

DECLARE RECORD TEST OUTPUT FILE;
OPEN FILE (TEST) TITLE ('testfile -SAM');