平坦化されたデータ



LabVIEW 2018ヘルプ


発行年月: 2018年3月
製品番号: 371361R-0112
製品情報を参照

ダウンロード (Windowsのみ)


LabVIEW 2016ヘルプ
LabVIEW 2017ヘルプ
LabVIEW 2018ヘルプ
LabVIEW 2019ヘルプ
LabVIEW 2020ヘルプ

LabVIEWは、データをメモリにある形式からファイルの読み書きにより適切な形式へ変換します。このより適切な形式は平坦化されたデータと呼ばれます。

LabVIEWではハンドル(別のメモリ領域へのポインタに対するポインタ)を使用して、文字列、配列、およびパスを保存するため、これらの文字列と配列を含むクラスタは不連続です。通常、データはツリー形式で保存されます。たとえば、クラスタは倍精度小数点数として、また文字列は文字列に対する4バイトのハンドルが続く8バイト浮動小数点数として保存されますが、メモリで拡張精度浮動小数点数に隣接した文字列データは保存されません。したがって、クラスタデータをディスクへ書き込むには、LabVIEWは2つの異なる場所からデータを取得する必要があります。多くの文字列、配列、パスを含むクラスタでは、データが多くの異なる場所に保存されます。

データをファイルへ保存する際、LabVIEWは保存する前にデータを単一の文字列に平坦化します。データを平坦化すると、任意の複素クラスタデータは複数の場所に保存されるものではなく、むしろ連続したデータになります。LabVIEWがファイルからデータをロードすると、LabVIEWは単一文字列を読み取り、その文字列を内部形式(場合によっては不連続に)に非平坦化して、逆操作を実行する必要があります。

LabVIEWでは平坦化されたデータが標準形式に正規化されるので、すべてのプラットフォームで、実行するVIはデータを使用することができます。平坦化された数値データは(最上位バイトから開始する)ビッグエンディアン形式で保存され、平坦化された拡張精度浮動小数点数は16バイト値として保存されます。

LabVIEWを使用せずに作成されたアプリケーションで使用する目的でデータをファイルへ書き込む場合、またはLabVIEWを使用せずに作成されたアプリケーションで生成されたファイルからデータを読み込む場合は、(最下位バイトから開始する)リトルエンディアン形式または、平坦化後または非平坦化前のビッグエンディアン形式にデータを変換することができます。Windowsベースのアプリケーションでは、通常、数値データはリトルエンディアン形式になります。

LabVIEWでデータを保存およびロードする場合、LabVIEWが内部で行うようにデータを平坦化および非平坦化するには、「文字列に平坦化」および「文字列から非平坦化」関数を使用してください。

各データの平坦化形式は、データのタイプをコード化しません。この情報はタイプデスクリプタに保存されます。「文字列から非平坦化」関数ではデータタイプを入力として指定する必要があります。これにより、関数は文字列を正しく解読することができます。

メモリへの書き込みを行う場合にデータを平坦化する代わりに、またはメモリから読み込みを行う場合にデータを非平坦化する代わりに、データタイプに関係なくデータを処理するには、バリアントデータタイプを使用してください。バリアント関数を使用して、バリアントデータの作成や操作を実行します。

メモ  バリアントデータで「文字列に平坦化」関数を使用する場合、バリアント、および属性を含むすべての内容が平坦化されます。ただし、「バリアントから平坦化文字列に変換」関数を使用する場合、バリアントのみが平坦化され、属性はすべて破棄されます。

ブールおよび数値オブジェクト

すべての数値タイプおよびブールタイプの平坦化形式は、データをビッグエンディアン形式でのみ保存します。たとえば、-19という値を持つ32ビット整数はFFFF FFEDに平坦化されます。1/4に相当する倍精度浮動小数点数は3FD0 0000 0000 0000に平坦化されます。TRUEのブール値は0以外の任意の値になります。FALSEのブール値は00になります。

拡張精度の数値の平坦化形式は、128ビット拡張精度浮動小数点形式です。拡張精度の数値をディスクに保存する場合は、それらの数値はこの形式で保存されます。

文字列およびパス

文字列とパスは可変サイズのため、バイト単位で長さを記録する平坦化された32ビット整数が平坦化形式の前に付きます。たとえば、ABCという値を持つ文字列タイプは0000 0003 4142 43に平坦化されます。文字列の平坦化形式はメモリに取り込まれる文字列形式と類似しています。

パスの場合はメモリに保存される際、先行する長さの値がないので、LabVIEWがデータを平坦化する場合、この値はメモリにある実際のデータサイズから取り込まれ、値の前に配置されます。この長さはPTH0の4つの文字が前に付きます。

たとえば、C:\Fileという値を持つパスは5054 4830 0000 000B 0000 0002 0143 0466 696C 65に平坦化されます。

5054 4830PTH0を示します。0000 000Bは合計で11バイトを示します。0000はタイプです。0002は構成要素数です。0143はパスカル文字列で文字Cを示します。0466 696C 65はパスカル文字列でFileを示します。

配列

配列の各次元のサイズを要素として記録する平坦化された32ビット整数は、平坦化された配列のデータの前に付きます。次元サイズがメモリに保存される場合と同じように、最も遅く変化する次元が最初で、それよりも速く変化する次元が後に続きます。LabVIEWがメモリに保存する場合と同じ順序で、これらの次元サイズのすぐ後に平坦化されたデータが続きます。以下の例は、6つの8ビット整数の2D配列を示します。

{ {1, 2, 3}, {4, 5, 6} }0000 0002 0000 0003 0102 0304 0506に平坦化されます。

以下の例は、ブール変数の平坦化された1D配列を示します。

{T, F, T, T}0000 0004 0100 0101に平坦化されます。TRUEの推奨値は01です。

クラスタ

平坦化されたクラスタは、クラスタ順位で要素が平坦化されたデータの連結です。たとえば、4の値(10進数)の16ビット整数と12の値の32ビット整数で構成される、平坦化されたクラスタは、0004 0000 000Cになります。

ABCという文字列と4の値の16ビット整数で構成される、平坦化されたクラスタは、0000 0003 4142 4300 04になります。

7の値の16ビット整数、8の値の16ビット整数のクラスタ、および9の値の16ビット整数で構成される、平坦化されたクラスタは、0007 0008 0009になります。

波形

波形はクラスタと同じ方法で平坦化されます。

Refnum

平坦化されたRefnumの多くは、LabVIEWの内部データ構造を表す平坦化された32ビット整数として保存されます。

Refnumのタイプコードで残りのRefnumを分類することができます。

0xE、0xF、0x15のタイプコードは、平坦化された文字列としてデータを保存するRefnumです。この文字列にはRefnumタグの値が含まれ、空(0の4バイト)になる場合があります。

0x1A、0X1C、0x1Dのタイプコードは以下の順序で連結します。

  1. Refnumタグにある名前の平坦化された文字列。Refnumにタグがない場合、この文字列は空(0の4バイト)です。
  2. Refnum特有の情報を含む平坦化された文字列。この文字列は空(0の4バイト)になる場合があります。
  3. Refnum特有の情報を含む平坦化された文字列。この文字列は空(0の4バイト)になる場合があります。
  4. Refnum特有の情報を含む平坦化された32ビット符号付き整数。
  5. Refnum特有の情報を含む平坦化された文字列。この文字列は空(0の4バイト)になる場合があります。

クラス

LabVIEWは、以下の一般形式に従って、LabVIEWクラスを平坦化します。

階層レベル クラス名 バージョンリスト プライベートデータ
  • 階層レベル—クラスがクラス階層の何段レベルで発生するかを表す4バイト符号なし整数。たとえば、この値が2の場合、そのクラスには自分とLabVIEWオブジェクトとの間に先祖クラスが1つ存在します。
    メモ  階層レベルが0の場合、オブジェクトはLabVIEWオブジェクトのインスタンスで、文字列の他の3つのフィールドは除外されます。
  • クラス名—PASCAL文字列で、クラスの修飾名の長さ情報を示す1バイトが付加されているPASCAL文字列。各PASCAL文字列、または最初のバイトが長さ情報を示し、それに続くバイトが文字列のテキストであるバイトのシーケンスは、修飾名の1セグメントを示します。最後のPASCAL文字列は長さのバイトがゼロです。平坦化された文字列のこのセクションには、クラス名セクションを4バイトの倍数に増やすために十分なゼロパッドバイトが含まれています。
  • バージョンリスト—一連のクラスタで、各クラスタはバージョン番号を表す4つの2バイト符号なし整数です。このリストの最初のクラスタはクラス名のバージョン、2番目の番号は親のバージョンと続きます。このリストには、階層のレベルごとに1つのバージョン番号が含まれます。
    メモ  階層レベルが1、バージョンが0の場合、平坦化されたデータはクラスのデフォルトデータを表し、文字列の残りのフィールドは除外されたままになります。
  • ブライベートデータ—階層の各レベルのブライベートデータを表す平坦化されたクラスタの連続。バージョンリストの順序と逆で、この連続内の最初のクラスタは最古の先祖クラスに対応します。平坦化されたクラスタは、後ろに続くデータのバイト数を表す4バイト符号付き整数で始まります。最初の番号が0の場合、平坦化されたクラスタは、階層内の対応クラスのデフォルトデータを表します。それ以外は、後ろに続くデータは、このトピックの前半で説明した平坦化されたクラスタの標準表記を使用します。平坦化されたクラスタは、4バイトずつクラスタを増加できるように十分なパッドバイトで終わります。


この記事は役に立ちましたか。

役に立たなかった