データベースと関係のないファイル入出力の場合、EGL の add 文は、レコードをファイルに入れます。
このコマンドの正確な動作および新規レコードが置かれる場所は、コマンドで使用するレコードのステレオタイプによって異なります。 詳しくは、このトピックの個別セクションを参照してください。

CSVRecord ステレオタイプを持つレコードを追加する場合は、ファイルの終わりにレコードが置かれます。
現行レコードが最初にファイルに書き込まれる場合は、EGL によりレコードの labels プロパティーがチェックされます。 プロパティーが非 NULL であれば、EGL は列のヘッダーを書き込みます。 区切り文字には、delimiter プロパティーに指定されたものが使用されます。
EGL は、既存の変換規則を使用して、データ行ごとに値を文字列に変換します。1 つの例外として、 BOOLEAN 値の場合、EGL は文字列「true」または「false」に適宜変換をします。その後、文字列が連結されて (文字列の間には区切り文字を使用)、データ行が作成されます。EGL は、最後に、 行をファイルの末尾に書き込み、さらにシステムに適した行末文字 (「¥n」、「¥r」、または「¥r¥n」) を書き込みます。
add ステートメントにより、レコードの配列を指定することができます。 NULL 配列の場合は、NullValueException が発生します。それ以外の場合、EGL は配列をループして、 配列のメンバーごとに add 処理をします。ファイルは以降の書き込みのためオープン状態となります。 CSV レコードで close ステートメントを使用することができます。
IndexedRecord ステレオタイプを持つレコードを追加する場合は、レコード内のキーによって、ファイル内でのレコードの論理位置が決まります。 既に使用されているファイル位置にレコードを追加すると、 ハード入出力エラー unique、または (重複が許可されている場合は) ソフト入出力エラー duplicate になります。
RelativeRecord ステレオタイプを持つレコードを追加する場合は、(recordNumberItem プロパティーで指定された) レコード番号フィールドの値によって、ファイル内でのレコードの位置が決まります。 既に使用されているファイル位置にレコードを追加すると、ハード入出力エラー unique が発生します。
SerialRecord ステレオタイプを持つレコードを追加する場合は、ファイルの終わりにレコードが置かれます。
プログラムがファイルの書き込みから読み取りへ、またはファイルの読み取りから書き込みへ変更されるたびに、EGL はファイルをいったん閉じて、再オープンします。 例えば、add 文を使用してシリアル・レコードに書き込みを行い、次に get next 文を使用して同じファイルからデータを読み取った場合、EGL はファイルを閉じます。 get next 文に続く add 文は、ファイルの先頭にレコードを追加します。 add 文に続く get next 文は、ファイル内の最初のレコードを読み取ります。 この振る舞いは、get next 文と add 文が別々のプログラムにあり、一方のプログラムで他方のプログラムが呼び出される場合にも起こります。
同時に複数のプログラムで同じファイルを開かないようにしてください。
if (userRequest == "A")
try
add record1;
onException(fileErr FileIOException)
myErrorHandler(fileErr);
end
end
| プラットフォーム | 問題 |
|---|---|
| VSAM | プログラムが add 文を使用して入力順データ・セットに書き込みを行い、get next 文を実行してその同じファイルからデータを読み取る場合、プログラムがファイルの書き込みから読み取りへ、またはファイルの読み取りから書き込みへ変更されるたびに、EGL はそのファイルをいったん閉じてから再オープンします。 したがって、add 文に続く get next 文は、ファイル内の最初のレコードを読み取ります。 同様に、get next 文 に続く add 文は、ファイルの先頭にレコードを追加します。この振る舞いは、get next 文と add 文が別々のプログラムにあり、一方のプログラムで他方のプログラムが呼び出される場合にも起こります。 |