我需要在C++
中以通用的方式访问以H5格式存储的数据集。目前它是这样的:
H5File* file = new H5File( path_to_dataset.c_str(), H5F_ACC_RDONLY );
DataSet* h5_dataset_file = new DataSet (file->openDataSet( "Dataset_name" ));
CompType dataset_access( sizeof(dataset_struct));
//...
dataset_access.insertMember(attribute_name,cur_byte_addr,PredType::NATIVE_INT32);
这是有效的,如果我知道所有参数,目前我缺少attribute_name
(例如“功能A”)。
有没有办法在H5文件中获取所有列名?或者我是否需要对其进行硬编码或至少使用用户输入?
修改
即。对于此示例,我需要 label_id,Feature1,Feature2,Feature3 ,但这些名称与每个数据集都不同:
答案 0 :(得分:1)
C ++ HDF5库的文档在这里:
HDF5 C++ API。这些为您提供了一个很好的类概述以及一些C ++示例。对于某些较低级别的内容,例如dataset.iterate_attrs(...)
中使用的attr_operator_t,请参阅HDF5 C/FORTRAN API。
作为一个最小的工作示例,下面的内容应该有效。请注意,使用lambda代替void attr_op(...)
函数可能更好。
#include <H5Cpp.h>
#include <iostream>
#include <string>
void attr_op(H5::H5Location &loc, const std::string attr_name,
void *operator_data) {
std::cout << attr_name << std::endl;
}
int main() {
// these are defined somewhere
std::string file_name, dataset_name;
H5::H5File file{file_name, H5F_ACC_RDONLY};
auto dataset = file.openDataSet(dataset_name);
dataset.iterateAttrs(attr_op);
}
从这里开始使用类似here的API函数。