Установка атрибутов в наборах данных с использованием API HDF5 C++

Я использую HDF5 C++ API в HDF5 1.8.7 и хотел бы использовать экземпляр H5::Attribute для установки пары скалярных атрибутов в экземпляре H5::DataSet, но не могу найти примеры. Это довольно просто, используя 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::Attribute и H5::DataSet в C++ API отсутствуют необходимые методы. Если кто-нибудь может привести конкретный пример использования C++ API, я был бы очень признателен.


person Marc    schedule 13.05.2011    source источник


Ответы (1)


если у вас есть объект набора данных 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 );
person Sam Russell    schedule 30.06.2011
comment
Тип строки действительно должен быть StrType strtype(PredType::C_S1, H5T_VARIABLE); - person Simon; 15.07.2011
comment
Метод createAttribute определен для H5::Object-s, поэтому вы можете использовать ту же идиому для присоединения атрибутов, например, к H5::Group -s. - person Laryx Decidua; 26.10.2013
comment
@Simon: в любом случае работает отлично - person Jim Garrison; 10.12.2013
comment
У меня ошибка сегментации с att.write( str_type, "myString" ); Сработало с att.write( str_type, std::string("myString")); - person Joma; 30.04.2015
comment
@Joma: у меня тоже ошибка; вы подали отчет об ошибке? - person user14717; 18.07.2015