HDF文件读取之一维二维方法

最近工作比较忙也没有那么多时间来更新微博和学习一些自己想学习的知识,工作有点累了,简单写一下hdf5格式文件的读取方法,废话不说啦,直接上代码(linux下):

//全局变量定义
hid_t m_hdfId;

//打开文件
int openFile(const char *pathName)
{
    if(pathName == NULL)
        return -1;

    m_hdfId = H5Fopen(pathName, H5F_ACC_RDONLY, H5P_DEFAULT);
    if(m_hdfId<0)
        return -2;
    return 1;
}

//读取接口,一维或者二维
int readFileDataByGroupNameAndVarName(const char *groupName, const char *varName, vector<float> &dataVector, int &row, int &column)
{
    int ndims = 0;
    herr_t herr;
    hsize_t dims[2];
    hid_t groupid = H5Gopen2(m_hdfId, groupName,H5P_DEFAULT);
    if(groupid<0)
    {
        H5Fclose(m_hdfId);
        return -1;
    }

    herr=H5LTget_dataset_ndims(groupid,varName,&ndims);

    size_t nsz;
    herr=H5LTget_dataset_info(groupid,varName,dims,NULL,&nsz);
    if(herr<0)
    {
        H5Fclose(m_hdfId);
        return -2;
    }

    if(ndims == 1)
    {
        row = dims[0];
        column = 1;
    }
    else if(ndims == 2)
    {
        row = dims[0];
        column = dims[1];
    }

    dataVector.resize(row*column);
    herr= H5LTread_dataset_float(groupid,varName,&dataVector[0]);
    if(herr<0)
    {
        H5Fclose(m_hdfId);
        return -2;
    }
    return 1;
}

//关闭
int closeFile()
{
    herr_t herr;
    herr=H5Fclose(m_hdfId);
    if(herr<0)
        return -1;
    return 1;
}

说明:代码很简单,注释很少,但肯定能看懂的。仅供参考,希望能给需要的人提供帮助。

猜你喜欢

转载自blog.csdn.net/toby54king/article/details/79413531