指定した実身の内容の読み書きを行います。
対象となる実身のタイプ、レコードタイプ、データの内容とは無関係に、単純にレコード内のデータの読み書きを行いますので、実身のデータ構成を十分理解した上で、注意して使用する必要があります。
基本文章編集などで作成した実身の内容は、TADデータ構造となっていますので、TADデータ構造の解釈を自身で行う必要があり、かなり大変な作業となります。
†TAD(タッド:TRON Application Databus)は、超漢字Vが使用しているデータ形式の規格の名称です。
実身操作は、このようなアプリケーションで作成された実身ではなく、マイクロスクリプト同士やほかのシステムとのデータ交換のために使用される比較的単純な独自の構造の実身を対象としています。
指定した実身を、指定したモードでオープンして使用できるようにします。
†新規に実身を生成することはできません。
〈実身指定〉
対象とする実身を指定します。“仮身セグメント”、または“パス名”を文字列定数や文字列変数で指定します。
〈モード指定〉
オープンするモードを文字列定数、または文字列変数で指定します。
〈モード指定〉 | 内容 |
---|---|
"R" | 読み込みモード |
"W" | 書き込みモード |
"U" | 更新モード |
"RX" | 読み込みモード(排他) |
"WX" | 書き込みモード(排他) |
"UX" | 更新モード(排他) |
"Rx" | 読み込みモード(排他書込み) |
"Wx" | 書き込みモード(排他書込み) |
"Ux" | 更新モード(排他書込み) |
†“排他”は、オープンしている実身へのほかからのアクセスを禁止します。
例:
VARIABLE path:C[30]
SET path[:]="/SYS/XX/TMP"
FOPEN path,"UX"
指定した実身をクローズします。
〈実身指定〉
対象とする実身を指定します。“仮身セグメント”、または“パス名”を文字列定数や文字列変数で指定します。
例: FCLOSE path
指定した実身のレコードのデータを読み込みます。実身がオープンされていない場合は、自動的に更新モード(U)でオープンします。この場合、適当な時点で自動的にクローズされます。
〈レコード番号式〉
対象とするレコード番号(0~)を表わす式です。存在しないレコード番号を指定することはできません。
〈オフセット式〉
読み込みを開始するオフセットバイト数(0~)を表わす式です。現在のレコードサイズ以下でなくてはいけません。
〈サイズ式〉
読み込みを行うバイト数(0~)を表わす式です。実際に読み込みを行うバイト数は、以下のうち一番小さな値となります。(0のときは、読み込みを行いませんがレコードサイズを得ることができます)
〈サイズ式〉で指定したバイト数
〈配列変数〉の最後の要素までのバイト数
対象レコードのレコードサイズ - オフセットバイト数
〈配列変数〉
読み込んだデータを格納する配列変数です。配列変数の型は任意です。〈オフセット式〉や〈サイズ式〉はバイト数で指定するため、変数が占めるバイト数に注意する必要があります。
配列変数の代わりに部分配列も指定することもできます。その場合は指定した〈先頭要素〉から〈要素数〉だけが読み書きの対象となります。
部分配列:〈配列変数名〉[〈先頭要素〉:〈要素数〉]
〈レコードサイズ変数〉
レコードサイズ(レコード全体のバイト数)を戻すための変数です。省略できます。指定した〈オフセット〉や〈サイズ〉には無関係に常にレコード全体のサイズが戻ります。
指定した実身のレコードへデータを書き込みます。実身がオープンされていない場合は、自動的に更新モード(U)でオープンします。この場合、適当な時点で自動的にクローズされます。
〈レコード番号式〉
対象とするレコード番号(0~)を表わす式です。存在しないレコード番号を指定することはできません。ただし、“最後のレコード番号+1”のレコード番号を指定したとき、新規にレコードを追加して書き込みます。この場合、オフセットバイト=0でなくてはいけません。
〈オフセット式〉
書き込みを開始するオフセットバイト数(0~)を表わす式です。現在のレコードサイズ以下でなくてはいけません。
オフセット式=-1のときは、特別に〈サイズ式〉で指定したバイト数にレコードサイズを縮小します。ただし、レコードサイズが指定したバイト数以下のときは何もしません。
〈サイズ式〉
書き込みを行うバイト数(1~)を表わす式です。実際に書き込みを行うバイト数は、以下のうち一番小さな値となります。
〈サイズ式〉で指定したバイト数
〈配列変数〉の最後の要素までのバイト数
レコードサイズを越えて書き込みを行った場合は、レコードサイズは自動的に拡張されます。書き込みを行わなかったレコード内のデータは変更されません。
〈配列変数〉
書き込むデータを保持している配列変数です。配列変数の型は任意です。ただし、〈オフセット式〉や〈サイズ式〉はバイト数で指定するため、変数が占めるバイト数に注意する必要があります。
配列変数の代わりに部分配列も指定することができ、その場合は指定した〈先頭要素〉から〈要素数〉だけが書き込みの対象となります。
部分配列:〈配列変数名〉[〈先頭要素〉:〈要素数〉]
〈レコードサイズ変数〉
レコードサイズ(レコード全体のバイト数)を戻すための変数です。省略できます。指定した〈オフセット〉や〈サイズ〉には無関係に、常に書き込みを行った後のレコード全体のサイズが戻ります。
□
∇データの対応
指定した〈配列変数〉の型とレコードデータ(バイト列)の関連を以下に示します。〈配列変数〉の型が異なったり、〈オフセット〉や〈サイズ〉の指定が変数のバイト数の境界をまたがったりすると、期待した結果にならない可能性があります。
∇使用例
対象となる実身は、適当な実身を複製するか、ほかのプログラムや開発環境のツールを使って作成します。適当な実身を複製した場合は、一般にいくつかのレコードがすでに存在しますが、最初にFWRITE文で書き込みを行うことで、オーバライトされることになります。
VERSION 3
VARIABLE B1:B[100]
VARIABLE B2:B[101]
VARIABLE SZ:I
# B1[0~99]に0~99の値を設定する
REPEAT 100
SET B1[$CNT]=$CNT
ENDREPEAT
# B1[0~99]をF1のオフセット0から書き込む
FWRITE F1,0,0,100,B1,SZ
# F1のオフセット0からB2[1~100]に読み込む
FREAD F1,0,0,100,B2[1:100],SZ