WRITE FILE(F) FROM(CUSTOMER) KEYFROM(N+1); DECLARE 1 CUSTOMER, 2 NAME CHAR(20) VARYING, 2 ADDRESS 3 NUMBER FIXED BINARY(15), 3 STREET CHAR(12) VARYING, 3 CITY CHAR(20) VARYING; DECLARE F FILE; . . .
DIRECT および KEYED SEQUENTIAL ファイルの場合、ファイルに対して実行される最初の WRITE によって、デフォルトのレコード サイズが設定されます。そのため、ファイルに書き込まれる最初のレコードが小さなレコードである場合、後続の WRITE で大きなレコードを書き込むと、エラーが発生する可能性があります。次に例を示します。
DECLARE F1 FILE, RECORD_ONE CHAR(5), RECORD_TWO CHAR(6); OPEN FILE(F1) RECORD DIRECT OUTPUT; WRITE FILE(F1) FROM(RECORD_ONE) KEYFROM(1); WRITE FILE(F1) FROM(RECORD_TWO) KEYFROM(2);
前記のプログラムでは、最初の WRITE でデフォルトのレコード サイズが 5 に設定されます。2 番目の WRITE は 5 よりも大きい値であるため、エラーが通知されます。この制限は、ファイルを開く際に、TITLE オプションで -DAM スイッチを使用してファイルのレコード サイズを指定している場合には適用されません。たとえば、上記の例の部分的なプログラムでは、次のように OPEN 文を記述すると、適切に動作します。
OPEN FILE(F1) TITLE('TESTFILE -DAM 10') RECORD DIRECT OUTPUT;
この場合、デフォルトのレコード サイズは 10 に設定され、CHAR(5) と CHAR(6) の両方の WRITE が適切に機能します。
説明
WRITE 文は、ファイルにレコードを追加します。SEQUENTIAL 属性および OUTPUT 属性を持つファイルではその末尾にレコードが書き込まれ、KEYED 属性および OUTPUT 属性、または KEYED 属性および UPDATE 属性を持つファイルでは該当位置にレコードが挿入されます。
出力レコード用のデータを含む変数は、非整列ビット文字列、全体が非整列ビット文字列で構成される構造体、または UNION 属性を持つ構造体にすることはできません。
f に関連付けられたファイルが KEYED 属性および SEQUENTIAL 属性を設定して開かれている場合、KEYFROM オプションを指定できます。KEYFROM オプションを指定すると、式 k の値が新しいレコードのキー値として機能します。このキー値を持つレコードがすでに存在する場合は、KEY 条件が通知されます。
索引 (VSAM) ファイルの場合、キー値の型は Character、Widechar、または Graphic のいずれかでなければならず、それ以外の場合は Character に変換されます。KEYFROM オプションを指定する場合は Character 型でなければならず、それ以外の場合は Character 型に変換されます。最大長は実装の定義に従います。
VSAM 以外のファイルでは、f に関連付けられたファイルが KEYED 属性および DIRECT 属性を設定して開かれている場合、KEYFROM オプションを指定する必要があります。式 k の値は新しいレコードのレコード番号として機能します。このレコード番号のレコードがすでに存在する場合は、KEY 条件が通知されます。
KEYFROM オプションを指定する場合、KEYED 属性を設定してファイルがすでに開かれている必要があります。KEYFROM オプションが記述されていても、暗黙的にファイルを開く際に KEYED 属性は設定されません。
FILE オプションには、ファイル値を生成する参照 f を含める必要があります。f に関連付けられたファイルは、RECORD OUTPUT を設定してすでに開かれているファイルであるか、閉じているファイルでなければなりません。ファイルが閉じている場合は WRITE 文で開かれ、OUTPUT RECORD SEQUENTIAL 属性が設定されます。
Open PL/I では、WRITE 文の FROM オプションでスカラー文字可変文字列変数を指定すれば、ストリーム ファイルで WRITE 文を使用できます。WRITE 文は、暗黙的な SKIP を実行し、FROM オプションで指定された可変文字列の現在の値とそれに続く改行文字で構成される行を書き込みます。