如何使用H5Sselect_elements读取数据

时间:2015-04-13 15:25:07

标签: hdf5

我有一个HDF文件,其中包含一个简单的复合类型数组。 要读取数组中的所有元素,我做

hid_t hDataSet = H5Dopen(hSpecies,AGENT_DATASET_NAME, H5P_DEFAULT);
herr_t status = H5Dread(hDataSet, agent_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, *ppAgentData);

现在我想只读取这些元素的选择。我在调用H5Dread之前放置了这个:

hsize_t coords[3][1];
coords[0][0] = 1;
coords[1][0] = 3;
coords[2][0] = 6;
hid_t hDataSpace = H5Dget_space(hDataSet);
int iRes = H5Sselect_elements(hDataSpace, H5S_SELECT_SET, 3, (const hsize_t *)&coords);

我预计我会得到第一个,第三个和第六个元素,但实际上我得到的结果与没有调用H5Sselect_elements相同。我是否误解了H5Sselect_elements的使用?问题是,我发现的所有例子都只使用此功能与H5Dwrite()...

结合使用

1 个答案:

答案 0 :(得分:1)

问题是我使用'H5S_ALL'作为 H5Dread 'mem_space_id''file_space_id'参数 STRONG>。工作代码现在看起来像这样:

hid_t hDataSetAgents = H5Dopen(hSpecies,AGENT_DATASET_NAME, H5P_DEFAULT);
hid_t hDataSpaceAgents = H5Dget_space(hDataSetAgents);
hsize_t coords[3];
coords[0] = 1;
coords[1] = 3;
coords[2] = 6;
int iRes = H5Sselect_elements(hDataSpaceAgents, H5S_SELECT_SET, 3, (const hsize_t *)&coords);
hsize_t d = 3;
agsub *pAgentData = new agsub[d];
hid_t hMemSpace = H5Screate_simple(1, &d, NULL);
herr_t status = H5Dread(hDataSetAgents, agsubid, hMemSpace, hDataSpaceAgents, H5P_DEFAULT, pAgentData);

'file_space_id'参数告诉H5Dread“从哪里读取”(在这种情况下,我的数据空间中选择了三个元素),以及'mem_space_id'参数告诉它“写入的位置”(在本例中是一个包含三个元素的简单数组)。如果为两者指定'H5S_ALL',则会读取整个数据空间。