封装了一个简单的C++ HDF5工具库,实现常用数据类型的读写
admin
2024-02-25 00:15:03
0

本文基于HDF5官方库,封装了一个简单的常用数据类型的库,HDF5支持的数据类型很多,其中的功能也很强大,但是日常开发中可能常用的包括int、double、string等数据,所以为了简化官方库的使用,自己弄了个小玩意,水平不足,还请见谅。

一.开发环境

Visual Studio2013+配置HDF5环境,也可以直接源码和HDF5库CMake编译。

如何配置HDF5开发环境请参考我的另一篇文章

如何配置HDF5开发环境

二.主要功能

1.HDF5写int,double,string类型的数据到hdf5文件中;

2.读hdf5文件中int,double,string的数据到程序的数据结构中;

3.写数据生成的hdf5文件名使用当前的时间戳来命名。

三.文件结构

  • Hdf5Function.h
  • Tools.h
  • Hdf5WriteValue.cpp
  • Hdf5ReadValue.cpp
  • Tools.cpp
  • 测试用的主函数main.cpp

四.HDF5写数据到hdf5文件功能实现

创建了类来实现相关功能,完整代码见:

CPlusPlusProjects/HDF5 at master · ZhaoDaBaoZzz/CPlusPlusProjects (github.com)

#include "Tool.h"
#include "Hdf5Function.h"
using namespace std;Hdf5WriteValue::Hdf5WriteValue(){}; //构造函数
Hdf5WriteValue::~Hdf5WriteValue(){};//析构函数/*创建HDF5*/
void Hdf5WriteValue::CreateNewFile()
{this->file=H5Fcreate(hdf5_filename().c_str,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);
//H5F_ACC_TRUNC能覆盖,H5F_ACC_EXCL不能覆盖}/*创建HDF5 String数据维度*/
void Hdf5WriteValue::CreateStringDataspace(const void *data,int rank,int col,int row)
{hsize_t dim[2];dim[0]=row;dim[1]=col;size_t size=sizeof(data)/sizeof(char);this->status=H5Test_size(dtype,size)this->dataspace=H5Screate_simple(rank,dim,NULL);
}/*创建HDF5数据维度*/
void Hdf5WriteValue::CreateDataspace(int rank,int col,int row)
{hsize_t dim[2];dim[0]=row;dim[1]=col;this->dataspace=H5Screate_simple(rank,dim,NULL);
}/*创建group*/
void Hdf5WriteValue::CreateGroup(string groupName)
{this->group=H5Gcreate(this->file,groupName.c_str(),H5P_DEFAULT,H5P_DEFAULT,H5P_DEFAULT);
}/*创建dataset,int,double,string*/
void Hdf5WriteValue::CreateIntDataset(string datasetName)
{this->dataset=H5Dcreate2(this->group,datasetNmae.c_str(),H5T_NATIVE_INT,this->dataspace,H5P_DEFAULT,H5P_DEFAULT,H5P_DEFAULT)
}void Hdf5WriteValue::CreateDoubleDataset(string datasetName)
{this->dataset=H5Dcreate2(this->group,datasetNmae.c_str(),H5T_NATIVE_Double,this->dataspace,H5P_DEFAULT,H5P_DEFAULT,H5P_DEFAULT)
}void Hdf5WriteValue::CreateStringDataset(string datasetName)
{this->dataset=H5Dcreate2(this->group,datasetNmae.c_str(),this->dtype,this->dataspace,H5P_DEFAULT,H5P_DEFAULT,H5P_DEFAULT)
}/*写入数据到对应类型的dataset*/
void Hdf5WriteValue::WriteIntValue(const void *data)
{this->status=H5Dwrite(this->dataset,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,data);
}void Hdf5WriteValue::WriteDoubleValue(const void *data)
{this->status=H5Dwrite(this->dataset,H5T_NATIVE_DOUNLE,H5S_ALL,H5S_ALL,H5P_DEFAULT,data);
}void Hdf5WriteValue::WriteStringValue(const void *data)
{this->status=H5Dwrite(this->dataset,this->dtype,H5S_ALL,H5S_ALL,H5P_DEFAULT,data);
}
/*关闭数据及文件,注意关闭顺序*/
void Hdf5WriteValue::CloseFile()
{this->status=H5Dclose(this->dataset);this->status=H5Sclose(this->dataspace);this->status=H5Gclose(this->group);this->status=H5Fclose(this->file);
}

五.HDF5读hdf5文件数据到程序中数据结构功能实现

#include "Tools.h"
#include "Hdf5Function.h"
using namespace std;Hdf5ReadValue::Hdf5ReadValue(){}; //构造函数
Hdf5ReadValue::~Hdf5ReadValue(){};//析构函数/*打开HDF5文件*/
void Hdf5ReadValue::OpenFile(const char* filepath)
{this->file = H5Fopen(filepath, H5F_ACC_RDONLY, H5P_DEFAULT);
}/*打开HDF5文件对应的Group*/
void Hdf5ReadValue::OpenGroup(const char* group)
{this->group = H5Gopen2(this->file, group, H5P_DEFAULT);
}/*打开HDF5文件对应的Dataset*/
void Hdf5ReadValue::OpenDataset(const char* dataset)
{this->dataset = H5Dopen(this->group, dataset, H5P_DEFAULT);
}/*读文件中的各种类型数据int,double,string*/
void Hdf5ReadValue::ReadIntData(void *data)
{this->status = H5Dread(this->OpenDataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
}void Hdf5ReadValue::ReadDoubleData(void *data)
{this->status = H5Dread(this->OpenDataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
}void Hdf5ReadValue::ReadStringData(void *data)
{size_t size = sizeof(data) / sizeof(char);this->status = H5Test_size(dtype, size);this->status = H5Dread(this->OpenDataset, this->dtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
}/*关闭数据及文件*/
void Hdf5ReadValue::CloseFile()
{this->status = H5Dclose(this->dataset);this->status = H5Gclose(this->group);this->status = H5Fclose(this->file);
}

六.头文件Hdf5Function.h

#include 
#include 
#include 
#include "hdf5.h"#ifndef HDF5FUNCTION_H_
#define HDF5FUNCTION_H_
using namespace std;//HDF5写功能
class Hdf5WriteValue
{
public:hid_t file, dataset, dataspace, group;herr_t status;hid_t dtype = H5Tcopy(H5T_C_S1);Hdf5WriteValue(){}; //构造函数~Hdf5WriteValue(){};//析构函数void CreateNewFile();void CreateStringDataspace(const void *data, int rank, int col, int row);void CreateDataspace(int rank, int col, int row);void CreateGroup(string groupName);void CreateIntDataset(string datasetName);void CreateDoubleDataset(string datasetName);void CreateStringDataset(string datasetName);void WriteIntValue(const void *data);void WriteDoubleValue(const void *data);void WriteStringValue(const void *data);void CloseFile();
};class Hdf5ReadValue
{
public:hid_t file, dataset, dataspace, group;herr_t status;hid_t dtype = H5Tcopy(H5T_C_S1);Hdf5ReadValue(){}; //构造函数~Hdf5ReadValue(){};//析构函数void OpenFile(const char* filepath);void OpenGroup(const char* group);void OpenDataset(const char* dataset);void ReadIntData(void *data);void ReadDoubleData(void *data);void ReadStringData(void *data);void CloseFile();
};
#endif

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...