【问题标题】:How to check whether a HDF5 path name its a group or a dataset?如何检查 HDF5 路径名称是组还是数据集?
【发布时间】:2019-11-22 09:28:59
【问题描述】:

我需要遍历给定 hdf5 路径的所有子项和属性,例如/Group1/dataset1/ 或 /Group1/Subgroup2/ 使用 HDF5 c++ API。为此我想写一个函数

Error HDF5File::listChildren(const string &location)

这将被递归调用。

更具体地说,我的问题是如何知道一个位置是一个组还是一个数据集。

如果我的文件只包含组,它会起作用,那么我会像这样开始:

Error HDF5File::listChildren(const string &location) {
 try {
   Group group = _file.openGroup(location);

但显然这会失败,如果在 location 下会有一个数据集

如何创建一个对组和数据集也适用的递归函数?

【问题讨论】:

    标签: c++ hdf5


    【解决方案1】:

    如果您不需要使用特定的 HDF5 库,您可能需要查看HDFql

    在 C++ 中使用 HDFql,您可以像这样解决您的问题:

    // retrieve all objects (i.e. groups, datasets, attributes, soft and external links)
    // stored in group "/Group1/Subgroup2" recursively (NOTE: you can also retrieve objects 
    // stored in dataset "/Group1/dataset1" but only attributes are returned since a dataset
    // cannot store groups, other datasets, soft or external links)
    HDFql::execute("SHOW /Group1/Subgroup2 LIKE **");
    
    
    // retrieve object name (from HDFql cursor) and print it
    while(HDFql::cursorNext() == HDFql::Success)
    {
       std::cout << "Object name: " << HDFql::cursorGetChar() << std::endl;
    }
    

    有关如何检索对象的更多信息,请参阅 HDFql quick startexamplesreference manual 文档。

    【讨论】:

    • 感谢您让我了解 HDFql。这很有趣。不过,我想知道使用标准 HDF5 库的标准方式,最好是 c++ api。
    猜你喜欢
    • 2012-01-15
    • 2014-03-09
    • 2011-10-16
    • 2011-11-25
    • 2018-12-18
    • 2011-12-26
    • 2013-08-14
    • 2015-07-30
    • 2019-11-29
    相关资源
    最近更新 更多