4D v16.3

VARIABLE TO BLOB

ホーム

 
4D v16.3
VARIABLE TO BLOB

VARIABLE TO BLOB 


 

VARIABLE TO BLOB ( variable ; BLOB {; offset | *} ) 
引数   説明
variable  変数 in BLOBに格納する変数
BLOB  BLOB in 変数を受け取るBLOB
offset | *  変数, 演算子 in BLOB内のオフセット (バイト単位) または値を追加する場合 *
in *でない場合、書き込み後の新しいオフセット

説明   

VARIABLE TO BLOBコマンドは、variableblobに格納します。

オプション引数 * を指定した場合には、変数はBLOBの最後に追加され、これに合わせてBLOBのサイズも拡張されます。オプション引数 * を使用すれば、BLOBがメモリ容量内であれば変数やリスト(他のBLOBコマンドを参照してください)をいくつでも順番にBLOBの中に格納できます。

オプション引数 *offset変数引数を指定しない場合、変数はBLOBの先頭に格納され、それ以前にそこにあった内容を上書きします。これに合わせてBLOBのサイズも調整されます。

offsetに変数引数を渡すと、変数値のオフセット位置(ゼロから始めます)からBLOBに書き込まれます。変数を書き込む位置にかかわらず、BLOBのサイズは渡した場所に応じて増やされます (必要に応じ変数のサイズも)。新しく割り当てられたバイトは、ゼロに初期化されます。

呼び出し後、offset変数引数は書き込まれたバイト数だけインクリメントされます。その後同じ変数を他のBLOB書き込みコマンドで使用してさらに変数やリストを書き込めます。

VARIABLE TO BLOBコマンドは、以下のものを除いて、どのようなタイプの変数でも(他のBLOBも)受け付けます:

  • ポインタ
  • ポインタ配列
以下の点に注意して下さい:
  • 階層リスト (ListRef) への参照である倍長整数の変数を保存した場合には、VARIABLE TO BLOBコマンドは階層リストではなく倍長整数変数を格納します。BLOB内に階層リストを格納、またはBLOBから階層リストを取り出すには、LIST TO BLOBBLOB to list を使用します。
  • C_OBJECT オブジェクトを variable 引数に渡した場合、コマンドはそれをUTF-8のJSON形式でBLOBの中に保存します。オブジェクトがポインターを含んでいた場合、ポインター自身ではなくそれが参照していた値が保存されます。
ただし、階層リスト (ListRef) への参照である倍長整数の変数を格納した場合には、VARIABLE TO BLOBコマンドは階層リストではなく倍長整数変数を格納します。BLOB内に階層リストを格納、またはBLOBから階層リストを取り出すには、LIST TO BLOBBLOB to list を使用します。

警告: 変数を格納するためにBLOBを使用したら、格納されたBLOBの内容を読み出すにはBLOB TO VARIABLE コマンドを使用しなければなりません。変数は4D内部形式を使用してBLOBに格納されるためです。

呼び出し後、変数が正常に格納された場合には、システム変数OKは1に設定されます。変数を格納するために必要なメモリがない等の理由で処理が実行できなかった場合には、システム変数OKは0に設定されます。

プラットフォーム独立互換性に関する注意

VARIABLE TO BLOBBLOB TO VARIABLE は4Dの内部フォーマットを使用してBLOBに格納された変数を取り扱います。この利点として、これら二つのコマンドを使用する際、プラットフォーム間の バイトスワップを気にする必要はありません。言い換えればこれらのコマンドを使用してWindowsで作成されたBLOBを Mac OS で使用す る、あるいはその逆を行うことができます。

以下の2つのプロジェクトメソッドを使用すると、ディスク上のドキュメントへすばやく配列を格納、またはドキュメントからすばやく配列を取得できます:

  ` SAVE ARRAY project method
  ` SAVE ARRAY ( String ; Pointer )
  ` SAVE ARRAY ( Document ; -> Array )
 C_STRING(255;$1)
 C_POINTER($2)
 C_BLOB($vxArrayData)
 VARIABLE TO BLOB($2->;$vxArrayData` Store the array into the BLOB
 COMPRESS BLOB($vxArrayData` Compress the BLOB
 BLOB TO DOCUMENT($1;$vxArrayData` Save the BLOB on disk
 
  ` LOAD ARRAY project method
  ` LOAD ARRAY ( String ; Pointer )
  ` LOAD ARRAY ( Document ; -> Array )
 C_STRING(255;$1)
 C_POINTER($2)
 C_BLOB($vxArrayData)
 DOCUMENT TO BLOB($1;$vxArrayData` Load the BLOB from the disk
 EXPAND BLOB($vxArrayData` Expand the BLOB
 BLOB TO VARIABLE($vxArrayData;$2->) ` Retrieve the array from the BLOB

上記のメソッドをアプリケーションに追加すれば、以下のように記述することができます:

 ARRAY STRING(...;asAnyArray;...)
  ` ...
 SAVE ARRAY($vsDocName;->asAnyArray)
  ` ...
 LOAD ARRAY($vsDocName;->asAnyArray)

以下の2つのプロジェクトメソッドを使用すると、任意の変数(1~n個)をすばやく、BLOBへ格納/復元することができます:

  ` STORE VARIABLES INTO BLOB project method
  ` STORE VARIABLES INTO BLOB ( Pointer { ; Pointer ... { ; Pointer } } )
  ` STORE VARIABLES INTO BLOB ( BLOB { ; Var1 ... { ; Var2 } } )
 C_POINTER(${1})
 C_LONGINT($vlParam)
 
 SET BLOB SIZE($1->;0)
 For($vlParam;2;Count parameters)
    VARIABLE TO BLOB(${$vlParam}->;$1->;*)
 End for
 
 
  ` RETRIEVE VARIABLES FROM BLOB project method
  ` RETRIEVE VARIABLES FROM BLOB ( Pointer { ; Pointer ... { ; Pointer } } )
  ` RETRIEVE VARIABLES FROM BLOB ( BLOB { ; Var1 ... { ; Var2 } } )
 C_POINTER(${1})
 C_LONGINT($vlParam;$vlOffset)
 
 $vlOffset:=0
 For($vlParam;2;Count parameters)
    BLOB TO VARIABLE($1->;${$vlParam}->;$vlOffset)
 End for

これらのメソッドをアプリケーションに追加すれば、以下のように記述することができます:

 STORE VARIABLES INTO BLOB(->vxBLOB;->vgPicture;->asAnArray;->alAnotherArray)
  ` ...
 RETRIEVE VARIABLES FROM BLOB(->vxBLOB;->vgPicture;->asAnArray;->alAnotherArray)

変数が正しく格納されるとOK変数は1に設定されます。そうでなければ0に設定されます。



参照 

BLOB to list
BLOB TO VARIABLE
LIST TO BLOB

 
プロパティ 

プロダクト: 4D
テーマ: BLOB
番号: 532

このコマンドはOKシステム変数を更新しますThis command can be run in preemptive processes

 
履歴 

初出: 4D v6
変更: 4D v14

 
タグ 

ListRef, Variable

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)