| 4D v18VARIABLE TO BLOB | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
    4D v18
 VARIABLE TO BLOB 
         | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| VARIABLE TO BLOB ( variable ; BLOB {; offset | *} ) | ||||||||
| 引数 | 型 | 説明 | ||||||
| variable | 変数 |   | BLOBに格納する変数 | |||||
| BLOB | BLOB |   | 変数を受け取るBLOB | |||||
| offset | * | 変数, 演算子 |   | BLOB内のオフセット (バイト単位) または値を追加する場合 * | |||||
|   | *でない場合、書き込み後の新しいオフセット | |||||||
VARIABLE TO BLOBコマンドは、variableをblobに格納します。
オプション引数 * を指定した場合には、変数はBLOBの最後に追加され、これに合わせてBLOBのサイズも拡張されます。オプション引数 * を使用すれば、BLOBがメモリ容量内であれば変数やリスト(他のBLOBコマンドを参照してください)をいくつでも順番にBLOBの中に格納できます。
オプション引数 * やoffset変数引数を指定しない場合、変数はBLOBの先頭に格納され、それ以前にそこにあった内容を上書きします。これに合わせてBLOBのサイズも調整されます。
offsetに変数引数を渡すと、変数値のオフセット位置(ゼロから始めます)からBLOBに書き込まれます。変数を書き込む位置にかかわらず、BLOBのサイズは渡した場所に応じて増やされます (必要に応じ変数のサイズも)。新しく割り当てられたバイトは、ゼロに初期化されます。
呼び出し後、offset変数引数は書き込まれたバイト数だけインクリメントされます。その後同じ変数を他のBLOB書き込みコマンドで使用してさらに変数やリストを書き込めます。
VARIABLE TO BLOBコマンドは、以下のものを除いて、どのようなタイプの変数でも(他のBLOBも)受け付けます:
警告: 変数を格納するためにBLOBを使用したら、格納されたBLOBの内容を読み出すにはBLOB TO VARIABLE コマンドを使用しなければなりません。変数は4D内部形式を使用してBLOBに格納されるためです。
呼び出し後、変数が正常に格納された場合には、システム変数OKは1に設定されます。変数を格納するために必要なメモリがない等の理由で処理が実行できなかった場合には、システム変数OKは0に設定されます。
プラットフォーム独立互換性に関する注意
VARIABLE TO BLOB と BLOB TO VARIABLE は4Dの内部フォーマットを使用してBLOBに格納された変数を取り扱います。この利点として、これら二つのコマンドを使用する際、プラットフォーム間の バイトスワップを気にする必要はありません。言い換えればこれらのコマンドを使用してWindowsで作成されたBLOBを Mac OS で使用す る、あるいはその逆を行うことができます。
以下の2つのプロジェクトメソッドを使用すると、ディスク上のドキュメントへすばやく配列を格納、またはドキュメントからすばやく配列を取得できます:
  ` SAVE ARRAY プロジェクトメソッド
  ` SAVE ARRAY ( 文字列 ; ポインター )
  ` SAVE ARRAY ( ドキュメント ; -> 配列 )
 C_TEXT($1)
 C_POINTER($2)
 C_BLOB($vxArrayData)
 VARIABLE TO BLOB($2->;$vxArrayData) ` 配列をBLOBに保存
 COMPRESS BLOB($vxArrayData) ` BLOBを圧縮
 BLOB TO DOCUMENT($1;$vxArrayData) ` BLOB をディスクに保存
 
  ` LOAD ARRAY プロジェクトメソッド
  ` LOAD ARRAY ( 文字列 ; ポインター )
  ` LOAD ARRAY ( ドキュメント ; -> 配列 )
 C_TEXT($1)
 C_POINTER($2)
 C_BLOB($vxArrayData)
 DOCUMENT TO BLOB($1;$vxArrayData) ` BLOB ディスクから読み出し
 EXPAND BLOB($vxArrayData) ` BLOBを展開
 BLOB TO VARIABLE($vxArrayData;$2->) ` 配列を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に設定されます。
	プロダクト: 4D
	テーマ: BLOB
	番号: 
        532
        
        
        
	
	初出: 4D v6
	変更: 4D v14
	変更: 4D v16 R4
ListRef, Variable
	
	
	
	
	
	
	
	
	
	
	
	ランゲージリファレンス ( 4D v18)
	
	
	
	
	
 コメントを追加
コメントを追加