在 fortran 中将写入附加到 hdf5 文件
Posted
技术标签:
【中文标题】在 fortran 中将写入附加到 hdf5 文件【英文标题】:Appending writes to hdf5 file in fortran 【发布时间】:2021-10-26 17:05:50 【问题描述】:我想以附加方式将数据写入fortran中的hdf5文件,但我无法将数据保存在大型内存数组中。
使用 ascii 编写时,我可以执行以下操作:
program example1
implicit none
integer :: nu, i
open(filename="someFile.txt", newunit=nu)
do i = 1, 10
write(nu, *) i
end do
close(nu)
end program example1
我会得到一个文件,其中包含从 1 到 10 的所有整数,但没有声明大小为 10 的一维数组。
我如何在 fortran 中编写一个 HDf5 文件来完全做到这一点,即在同一文件中以相同的数据集名称保存数字,但不保存包含这些数字的数组?
【问题讨论】:
您想使用可扩展数据集。这在 HDF Group 文档中有很好的记录。从这里开始:Extendible Datasets 这里有代码示例:HDF5 Examples from Learning The Basics 这些链接很有帮助——尽管并不简单。谢谢! 【参考方案1】:您需要创建一个可扩展的数据集,然后在 hyperslab 或点选择的帮助下填充它(否则,之前写入的数据将被覆盖)。使用HDFql,您的用例可以在 Fortran 中解决如下:
PROGRAM Example
USE HDFql
CHARACTER :: variable_number
INTEGER :: state
INTEGER :: i
state = hdfql_execute("CREATE AND USE FILE test.h5")
state = hdfql_execute("CREATE DATASET dset AS INT(0 TO UNLIMITED)")
WRITE(variable_number, "(I0)") hdfql_variable_register(i)
DO i = 1, 10
state = hdfql_execute("ALTER DIMENSION dset TO +1")
state = hdfql_execute("INSERT INTO dset(-1) VALUES FROM MEMORY " // variable_number)
END DO
state = hdfql_variable_unregister(i)
state = hdfql_execute("CLOSE FILE")
END PROGRAM
【讨论】:
以上是关于在 fortran 中将写入附加到 hdf5 文件的主要内容,如果未能解决你的问题,请参考以下文章
将浮点数组写入和附加到 C++ 中 hdf5 文件中的唯一数据集
如何使用 Fortran API 将字符串数组写入 HDF5 数据集?
致命错误:在 (1) 处打开的文件“hdf5.mod”不是 GNU Fortran 模块文件
如何在 C++ 中将 stl::string 写入 HDF5 文件