C语言对HDF基本操作
/*************************************************************************
1、hdf文件的创建
2、数据集的创建、读取、写入
************************************************************************/
#include
#include
#include
#include
#include
#include
#include
#define FILENAME "li.h5"
hid_t file_create();
hid_t dset_create(int file_id, char *SDSName, int Rank, hsize_t *dims, int **data);
hid_t att_create(herr_t file_id, char *SDSName, char *attr_name, char *attr_data);
int main()
{
herr_t status, datawrite_id, attr_id;
hid_t file_id, RDataset_id, dataset_id, dset_spc;
char SDSName[10] = "latitude", attr_data[6] = "meter", attr_name[5] = "Unit";
int i, j, Rank = 2;
int data[100][100];
int dat[100][100];
hsize_t dims[2];
dims[0] = 100;
dims[1] = 100;
/*文件创建*/
file_id = file_create();
if(file_id > 0)
{
printf("创建文件成功!");
}
else
{
printf("创建文件失败!");
}
/*创建数据集*/
dataset_id = dset_create(file_id, SDSName, Rank, dims, data);
if(dataset_id < 0)
{
printf("数据集%s创建失败!\n",SDSName);
}
else
{
printf("数据集%s创建成功!\n",SDSName);
}
//数据集属性创建
attr_id = att_create(file_id, SDSName, attr_name, attr_data);
//读取数据集
RDataset_id = H5LTread_dataset(file_id, SDSName, H5T_NATIVE_INT, dat);
for(i=0;i<100;i++)
{
for(j=0;j<100;j++)
{
if(dat[i][j] < 100)
{
dat[i][j] = 3;
}
}
}
//dset_spc = H5Dget_space(dataset_id);
//写入数据集
datawrite_id = H5LTmake_dataset(file_id, SDSName, Rank, dims, H5T_NATIVE_INT, dat);
//datawrite_id = H5Dwrite(dataset_id, H5T_NATIVE_INT, dset_spc, H5F_ACC_TRUNC, H5P_DEFAULT, dat);
H5Aclose(attr_id);
H5Dclose(datawrite_id);
H5Fclose(file_id);
return 0;
}
//创建文件
hid_t file_create()
{
hid_t file_id;
file_id = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
return file_id;
}
hid_t dset_create(int file_id, char *SDSName, int Rank, hsize_t *dims, int data[100][100])
{
hid_t dataset_id;
int i, j, num = 1;
for(i=0;i<100;i++)
{
for(j=0;j<100;j++)
{
data[i][j] = num;
num++;
}
}
dataset_id = H5LTmake_dataset(file_id, SDSName, Rank, dims, H5T_NATIVE_INT, data);
return dataset_id;
}
//数据集属性创建
hid_t att_create(herr_t file_id, char *SDSName, char *attr
_name, char *attr_data)
{
hid_t attr_id;
attr_id = H5LTset_attribute_string(file_id, SDSName, attr_name,attr_data);
return attr_id;
}