首页 文章

如何使用Fortran API将字符串数组写入HDF5数据集?

提问于
浏览
0

使用fortran语言定义字符串数组:

character(len = 20), dimension(5) :: strings = (/"hello", "world", "Hello", "HDF5", "fortran"/)

现在我想使用HDF5 API参考文档所示的 h5ltmake_dataset_string_f() 接口将此数组保存到数据集中

Fortran90接口:h5ltmake_dataset_string_f子例程h5ltmake_dataset_string_f(loc_id,dset_name,buf,errcode)隐式无
整数(HID_T),意图(IN):: loc_id!文件或组标识符字符(LEN = *),intent(IN):: dset_name!数据集字符的名称(LEN = *),intent(IN),dimension(:) :: buf!数据缓冲区整数::错误代码!错误代码结束子程序h5ltmake_dataset_string_f

我的呼叫代码如下

h5ltmake_dataset_string_f(group_id, dset_name, strings, error)

在子程序调用之前定义了group_id,dset_name和错误 .

但是当我编译和构建这个代码时,会发生编译错误

h5ltmake_dataset_string_f():违反了实际参数和伪参数!

那么如何将字符串写入一个数据集?

2 回答

  • 0

    虽然几年前问题已经解决,但是这里有一个解决方案,使用HDFql(http://www.hdfql.com)将字符串数组("hello","world","Hello","HDF5","fortran")写入Fortran中的HDF5数据集 . 发布此文件以防其他人在执行此类操作时发现自己在使用HDF5低级别细节时遇到困难:

    PROGRAM Example
    
        ! use HDFql module (make sure it can be found by the Fortran compiler)
        USE HDFql
    
        ! declare variables
        CHARACTER(LEN = 20), DIMENSION(5) :: strings = [CHARACTER(LEN = 20) :: "hello", "world", "Hello", "HDF5", "fortran"]
        CHARACTER :: variable_number
        INTEGER :: state
    
        ! create an HDF file named "example.h5" and use (i.e. open) it
        state = hdfql_execute("CREATE FILE example.h5")
        state = hdfql_execute("USE FILE example.h5")
    
        ! create a dataset named "my_dataset" of type char (size 20) of one dimension (size 5)
        state = hdfql_execute("CREATE DATASET my_dataset AS CHAR(5, 20)");
    
        ! register variable "strings" for subsequent use (by HDFql)
        state = hdfql_variable_register(LOC(strings))
        WRITE(variable_number, "(I0)") state
    
        ! insert (i.e. write) content of variable "strings" into dataset "my_dataset"
        state = hdfql_execute("INSERT INTO my_dataset VALUES FROM MEMORY " // variable_number)
    
        ! unregister variable "strings" as it is no longer used/needed (by HDFql)
        state = hdfql_variable_unregister(LOC(strings))
    
    END PROGRAM
    
  • 0

    使用API h5dwrite_f(...),而不是h5ltmake_dataset_f()来编写字符串数组 .

相关问题