1

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

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

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

Fortran90 接口: h5ltmake_dataset_string_f

子程序 h5ltmake_dataset_string_f(loc_id,dset_name,buf,errcode )

    implicit none

整数(HID_T),意图(IN)::loc_id !文件或组标识符

字符(LEN=*),意图(IN)::dset_name !数据集的名称

字符(LEN=*),意图(IN),维度(:) :: buf !数据缓冲区

整数 :: 错误码 !错误代码

结束子程序 h5ltmake_dataset_string_f

我的调用代码如下

h5ltmake_dataset_string_f(group_id, dset_name, strings, error)

并且在子程序调用之前已经定义了 group_id、dset_name 和 error。

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

h5ltmake_dataset_string_f():实际参数和虚拟参数已被违反!

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

4

2 回答 2

0

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

于 2012-12-14T15:35:50.967 回答
0

虽然这个问题是几年前提出的,但这里有一个解决方案,可以使用 HDFql(http ://www.hdfql.com)。发布此内容以防其他人在执行此类操作时发现自己在 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 AND 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_transient_register(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)

END PROGRAM
于 2017-04-02T10:39:47.503 回答