在C ++中从HDF5读取复合数据类型的字符串

时间:2013-01-19 16:36:27

标签: c++ hdf5

我有一个hdf5复合数据集,它是用Python构建的,我试图从中读取。我有四列,其中一列是长度为1的字符串。我设法读取除字符串列以外的所有字符串。下面是我尝试只读取字符串列的示例代码:

#include <string>
#include <iostream>
#include "H5Cpp.h"

typedef struct data_type {
    char string_column[1];
} data_type;

int main ( void )
{
    int NBR_OF_ROWS = 28884;
    H5::H5File file = H5::H5File(MY_FILE, H5F_ACC_RDONLY);
    H5::DataSet dataset = H5::DataSet(file.openDataSet(MY_DATASET));

    H5::CompType mtype(sizeof(data_type));
    mtype.insertMember("member", HOFFSET(data_type, string_column),
            H5::PredType::C_S1);
    data_type *data = new data_type[NBR_OF_ROWS];
    dataset.read(data, mtype);

    std::cout << "string column " << data[0].string_column << std::endl;

    return 0;
}   

这编译但什么都不打印:(我试图在堆上分配数据,但无济于事。我在ubuntu上使用g ++。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我认为您的问题来自您使用的字符串数据类型。您没有指定大小,您只是说它是一个字符串

尝试制作长度为1的H5::StrType

H5::StrType string_type(H5::PredType::C_S1, 1);

然后在复合数据类型中使用它:

mtype.insertMember("member", HOFFSET(data_type, string_column), string_type);