我使用HDF5在C ++中工作,我需要帮助来保存多值数据。由于我不完全确定这是否是最佳方法,我想尝试将数据保存为原始数据集中的复合类型(如本答案中所述:https://stackoverflow.com/a/35597759)。
我的代码目前看起来像这样(字符串完全用于测试):
#ifdef WITH_HDF
#include <iostream.h>
#else
#include <iostream>
#endif
#include <string>
#include "H5Cpp.h"
using namespace std;
using namespace H5;
const int LENGTH = 1;
const int RANK = 1;
const string FILE_NAME = "fhirBASIS.h5";
/**Compound datatype with datatypes*/
struct observation_t
{
char* status;
char* device;
char* code;
char* value;
char* system;
char* version;
int userSelected;
char* subject;
char* effectiveDateTime;
};
/*
* Code start
*/
int main(){
H5File file("fhirBASIS.h5",H5F_ACC_TRUNC);
Group grp(file.createGroup("SensoricData"));
observation_t observation;
//status string
std::string dts = "status";
observation.status = new char[dts.length()];
observation.status = const_cast<char*> (dts.data());
//device string
std::string dtd = "device";
observation.device = new char[dtd.length()];
observation.device = const_cast<char*> (dtd.data());
//code string
std::string dtc = "code";
observation.code = new char[dtc.length()];
observation.code = const_cast<char*> (dtc.data());
//value string
std::string dtv = "value";
observation.value = new char[dtv.length()];
observation.value = const_cast<char*> (dtv.data());
//system string
std::string dtsys = "system";
observation.system = new char[dtsys.length()];
observation.system = const_cast<char*> (dtsys.data());
//version string
std::string dtver = "version";
observation.version = new char[dtver.length()];
observation.version = const_cast<char*> (dtver.data());
//userSelected bool
observation.userSelected = 0;
//subject string
std::string dtsub = "subject";
observation.subject = new char[dtsub.length()];
observation.subject = const_cast<char*> (dtsub.data());
//effectiveDateTime string
std::string dtedt = "effectiveDateTime";
observation.effectiveDateTime = new char[dtedt.length()];
observation.effectiveDateTime = const_cast<char*> (dtedt.data());
// create spatial structure of data
hsize_t len = LENGTH;
hsize_t dim[1] = {len};
DataSpace space(RANK,dim);
// write required size char array and declare datatypes
H5::StrType datatype(H5::PredType::C_S1, H5T_VARIABLE);
hid_t strtype = H5Tcopy (H5T_C_S1);
H5Tset_size (strtype, H5T_VARIABLE);
//defining the datatype to pass HDF55
H5::CompType mtype(sizeof(observation_t));
mtype.insertMember("status", HOFFSET(observation_t, status), datatype);
mtype.insertMember("device", HOFFSET(observation_t, device), datatype);
mtype.insertMember("code", HOFFSET(observation_t, code), datatype);
mtype.insertMember("value", HOFFSET(observation_t, value), datatype);
mtype.insertMember("system", HOFFSET(observation_t, system), datatype);
mtype.insertMember("version", HOFFSET(observation_t, version), datatype);
mtype.insertMember("userSelected", HOFFSET(observation_t, userSelected), PredType::NATIVE_INT);
mtype.insertMember("subject", HOFFSET(observation_t, subject), datatype);
mtype.insertMember("effectiveDateTime", HOFFSET(observation_t, effectiveDateTime), datatype);
DataSet dataset = grp.createDataSet("Observations",mtype,space);
dataset.write(&observation,mtype);
dataset.close();
space.close();
mtype.close();
grp.close();
file.close();
return 0;
}
我想实现,我可以存储多个值,即数据“状态”。我通过创建复合数据类型并编辑状态值以使用它来尝试此操作。这不起作用,但我不知道如何解决它。感谢任何帮助,提前谢谢!