2011-05-13 1 views
14

HDF5 1.8.7에서 HDF5 C++ API를 사용하고 H5 :: Attribute 인스턴스를 사용하여 H5 :: DataSet 인스턴스에서 몇 가지 스칼라 속성을 설정하려고합니다. 예제를 찾을 수 없습니다. 그것은 꽤 잘라 건조 C API를 사용하여이다 : 어떤 이상한 이유로HDF5 C++ API를 사용하여 데이터 세트에서 속성 설정

/* Value of the scalar attribute */ 
int point = 1;       

/* 
* Create scalar attribute for the dataset, my_dataset. 
*/ 
aid2 = H5Screate(H5S_SCALAR); 
attr2 = H5Acreate(my_dataset, "Integer attribute", H5T_NATIVE_INT, aid2,H5P_DEFAULT); 

/* 
* Write scalar attribute to my_dataset. 
*/ 
ret = H5Awrite(attr2, H5T_NATIVE_INT, &point); 

/* 
* Close attribute dataspace. 
*/ 
ret = H5Sclose(aid2); 

/* 
* Close attribute. 
*/ 
ret = H5Aclose(attr2); 

의 H5 :: 특성 및 C++ API에서 H5 : 데이터 집합 클래스는 필요한 방법을 누락 될 것으로 보인다. 누구든지 C++ API를 사용하여 구체적인 예를 생각해 낼 수 있다면 매우 감사 할 것입니다.

답변

16

당신이 DataSet 개체의 DS가 있다면 ...

문자열 속성을 추가 ...

StrType str_type(0, H5T_VARIABLE); 
DataSpace att_space(H5S_SCALAR); 
Attribute att = ds.createAttribute("myAttribute", str_type, att_space); 
att.write(str_type, "myString"); 

있는 int 속성을 추가 ...

IntType int_type(PredType::STD_I32LE); 
DataSpace att_space(H5S_SCALAR); 
Attribute att = ds.createAttribute(" myAttribute", int_type, att_space); 
int data = 77; 
att.write(int_type, &data); 
+4

문자열 입력해야 정말 'StrType strtype (PredType :: C_S1, H5T_VARIABLE); ' – Simon

+1

createAttribute 메소드는 H5 :: Object-s에 대해 정의되어 있으므로 H5 :: Group -s에 속성을 연결하는 데 동일한 관용구를 사용할 수 있습니다. –

+0

@ 시몬 : [어느 쪽이든 잘 작동합니다.] (http://www.hdfgroup.org/HDF5/doc/cpplus_RM/classH5_1_1StrType.html#a502e6a4895bf51314204179e3f093a7f) –