ENUMデータの書込み、読込みについて。
ENUMデータを書き込むには、"H5T"クラスにある"createEnum"メソッドを使用して"H5DataTypeID"クラスを作成する。引数は"H5T.H5Type"の列挙なので、適当に指定。NATIVE_INTなどでいいと思う。
H5DataTypeId typeID = H5T.enumCreate( H5T.H5Type.NATIVE_INT );
次に、書き込むデータとHDFViewなどを使用した場合に表示されるデータを準備する。使うメソッドは"H5T"クラスにある"enumInsert"のジェネリックメソッド。
引数は以下の通り
"typeId" : "H5DataTypeId"クラス、上記のメソッドで取得したものを使用する
"name" : "string"クラス 、表示する名前
"value" : "ref int"クラス 、名前表示と関係させる値
例えば、bool値"True"と"False"を作成する場合は、以下のようにする。
int f_index = 0;
int t_index = 1;
H5T.enumInsert<int>( typeID, "FALSE", ref f_index );
H5T.enumInsert<int>( typeID, "TRUE", ref t_index );
あとは"H5DataSetId"クラスを作成して、"write<>"してやればいい。
値を読み込む場合は、値型を読み込む方法を行えば、数値が取得できる。
その後、"H5DataTypeId"クラスを使用して表示名を取り出す。取り出す際に使用するメソッドは"H5T"クラスにある"enumNameOf"というジェネリックメソッドを使用する。引数、戻り値は以下の通り。
"typeId" : "H5DataTypeId"クラス、読み込み時に使用したもの
"value" : "ref int"クラス、データと関連付けた値を使用。要は読み取り時に取得した値。
戻り値:"string"クラス。関連付けた名前
string name = H5T.enumNameOf<int>( rTypeID, ref index );
戻ってきた値を調べて、再びenum値に戻してやればC#上で使用できるようになる。
以下、サンプル。
// 書込みサンプル
H5FileId fileID = H5F.open( "C:\\HDFSampleFile.hdf5", H5F.OpenMode.ACC_RDWR );
H5DataSpaceId spaceID = H5S.create_simple( 1, newlong[] { 1 } );
H5DataTypeId typeID = H5T.enumCreate( H5T.H5Type.NATIVE_INT );
H5DataSetId dataSetID = H5D.create( fileID,"ENUMDataSet",typeID ,spaceID );
int[] intArray = new int[] { 1 };
H5Array<int> array = new H5Array<int
※コメントの受付件数を超えているため、この記事にコメントすることができません。