HDF4文件读写

SD-多文件科学数据接口

SDattrinfo/sfgainfo 检索有关属性的信息。

SDcreate/sfcreate 创建一个新的数据集。

SDdiminfo/sfgdinfo 检索有关维度的信息。

SDend/sfend 终止对 SD 接口的访问。

SDendaccess/sfendacc 终止对数据集的访问。

SDfileinfo/sffinfo 检索文件中数据集的数量和全局属性的数量。

SDfindattr/sffattr 查找给定名称的属性的索引。

SDgetcal/sfgcal 检索与数据集关联的校准信息。

SDgetchunkinfo/sfgichnk 检索数据集的分块信息。

SDgetdatastrs/sfgdtstr 检索数据集的预定义属性。

SDgetdimid/sfdimid 返回给定索引的维度的标识符。

SDgetdimscale/sfgdscale 检索维度的比例值。

SDgetdimstrs/sfgdmstr 检索维度的预定义属性。

SDgetfillvalue/sfgfill/sfgcfill 读取数据集的填充值,如果该值已设置。

SDgetinfo/sfginfo 检索数据集的名称、等级、维度大小、数据类型和属性数。

SDgetrange/sfgrange 检索范围的最大值和最小值。

SDidtoref/sfid2ref 返回分配给数据集的参考编号。

SDiscoordvar/sfiscvar 确定数据集是否为坐标变量。

SDisdimval_bwcomp/sfisdmvc 确定维度是具有新旧表示还是只有新表示。

SDisrecord/sfisrcrd 确定数据集是否可附加。

SDnametoindex/sfn2index 确定给定名称的数据集的索引。

SDreadattr/sfrnatt/sfrcatt 读取属性值。

SDreadchunk/sfrchnk/sfrcchnk 从分块数据集中读取数据块。

SDreaddata/sfrdata/sfrcdata 从数据集或坐标变量中读取数据的子样本。

SDreftoindex/sfref2index 返回给定参考编号的数据集的索引。

SDselect/sfselect 获取数据集的数据集标识符(sds_id)。

SDsetattr/sfsnatt/sfscatt 将属性附加到对象。

SDsetblocksize/sfsblsz 设置用于存储无限维度数据集的块大小。

SDsetcal/sfscal 设置校准信息。

SDsetchunk/sfschnk 设置数据集的块大小和压缩方法(如果有)。

SDsetchunkcache/sfscchnk 设置块缓存的大小。

SDsetcompress/sfscompress 使用指定的压缩方法压缩数据集。

SDsetdatastrs/sfsdtstr 设置数据集的预定义属性。

SDsetdimname/sfsdmname 为维度分配名称。

SDsetdimscale/sfsdscale 存储维度的值。

SDsetdimstrs/sfsdmstr 设置维度的预定义属性。

SDsetdimval_comp/sfsdmvc 确定维度是具有新旧表示还是仅具有新表示。

SDsetexternalfile/sfsextf 将数据存储在外部文件中。

SDsetfillmode/sfsflmd 设置文件的当前填充模式。

SDsetfillvalue/sfsfill/sfscfill 设置数据集的填充值。

SDsetnbitdataset/sfsnbit 指定数据集值的非标准位长度。

SDsetrange/sfsrange 设置数据集的最大和最小范围值。

SDstart/sfstart 打开一个 HDF 文件并初始化一个 SD 接口。

SDwritechunk/sfwchnk/sfwcchnk 将数据块写入分块数据集。

SDwritedata/sfwdata/sfwcdata 将数据的子样本写入数据集或坐标变量。

SDstart:打开一个 HDF 文件并初始化一个 SD 接口

int32 SDstart(char *filename, int32 access_mode)

filename:(IN)HDF文件名称
access_mode:(IN)当前会话期间有效的文件访问模式

返回值:如果成功则返回 SD 接口标识符,否则返回 FAIL(或 -1)。

描述:SDstart 以参数filename 指定的名称打开文件,访问模式由参数access_mode 指定,并返回一个SD 接口标识符(sd_id)。在对该文件进行任何其他 SD 调用之前,必须为每个文件调用此例程。 SDstart 返回的标识符类型目前与 Hopen 返回的标识符不同。因此,此例程返回的 SD 接口标识符 (sd_id) 不会被其他 HDF 接口理解。 要混合 SD API 调用和其他 HDF API 调用,请在同一个文件上使用 SDstart 和 Hopen。 SDstart 必须在所有 SD 调用之前,并且 Hopen 必须在所有其他 HDF 函数调用之前。要终止对文件的访问,请使用 SDend 处理 SD 接口标识符 sd_id,并使用 Hclose 处理文件标识符 file_id。 由参数文件名标识的文件可以是以下任何一种:基于 XDR 的 netCDF 文件、“旧式”DFSD 文件或“新式”SD 文件。
参数 access_mode 的值可以是以下之一:
DFACC_READ - 打开现有文件以进行只读访问。如果文件不存在,指定此模式将导致 SDstart 返回 FAIL(或 -1)。
DFACC_WRITE - 打开现有文件进行读写访问。如果文件不存在,指定此模式将导致 SDstart 返回 FAIL(或 -1)。
DFACC_CREATE - 创建一个具有读写权限的新文件。如果文件已经存在,则其内容将被替换。

SDend:终止对 SD 接口的访问

intn SDend(int32 sd_id)

sd_id:(IN)SDstart 返回的 SD 接口标识符

返回值:如果成功则返回 SUCCEED(或 0),否则返回 FAIL(或 -1)。

描述:当 SD 接口活动完成时,SDend 关闭文件并释放库分配的内存。 如果调用程序在没有调用此例程的情况下退出,则最近对内核文件数据所做的更改可能不会刷新到文件中。 请注意,每个 SDstart 必须有一个匹配的 SDend。

SDfileinfo:检索文件中数据集的数量和全局属性的数量

intn SDfileinfo(int32 sd_id, int32 *num_datasets, int32 *num_global_attrs)

sd_id:(IN)SDstart 返回的 SD 接口标识符
num_datasets:(OUT)文件中的数据集数量
num_global_attrs:(OUT)文件中的全局属性数量

返回值:如果成功则返回 SUCCEED(或 0),否则返回 FAIL(或 -1)。

描述:SDfileinfo 在参数 num_datasets 中返回数据集的数量,在参数 num_global_attrs 中返回全局属性的数量。 术语“全局属性”是指分配给文件的属性。 全局属性由 SDsetattr 使用 SD 接口标识符 (sd_id) 而不是数据集标识符 (sds_id) 创建。 参数 num_datasets 返回的值包括坐标变量数据集的数量。 要确定数据集是否为坐标变量,请使用 SDiscoordvar。


HDF4::Select :返回一个非“假”数据集的数据集标识符(sds_id)

“单文件”SD例程添加了多个“假”数据集,严重地杂乱了文件并使搜索复杂化。更强大的SDselect增加了SDgetinfo的功能,忽略了假数据集。

int32 HDF4::Select(int32 sd_id, int32& index, char* name, int32* rank,
                   int32* size, int32* dType, int32* nAttrs, int32 dsCount);

sds_id = HDF4::SDselect(sd_id, index);  //获取数据集的数据集标识符(sds_id)

status = HDF4::SDgetinfo(sds_id, name, rank, size, dType, nAttrs);  //获取由sds_id标识的数据集的名称name、维度数rank、维度大小size、数据类型dType和属性数nAttrs

if (strncmp(name, "fakeDim", 7) != 0)  //检查是否为“假”数据集

HDF4::SDendaccess(sds_id);  //终止对数据集的访问

SDselect:获取数据集的数据集标识符(sds_id)

 int32 SDselect(int32 sd_id, int32 sds_index) 

sd_id:(IN)SDstart 返回的 SD 接口标识符
sds_index:(IN)数据集的索引

返回值:如果成功则返回数据集标识符 (sds_id),否则返回 FAIL(或 -1)。

描述:SDselect 获取由其索引 sds_index 指定的数据集的数据集标识符(sds_id)。 与 netCDF 的集成要求将维度(或坐标变量)作为数据集存储在文件中。因此,sds_index的值可能对应的是坐标变量而不是实际的数据集。用户应该使用例程 SDiscoordvar 来确定给定的数据集是否是坐标变量。 sds_index 的值大于等于 0 且小于文件中的数据集数。文件中的数据集总数可以通过调用 SDfileinfo 获得。如果数据集的名称已知,SDnametoindex 例程可用于查找数据集的索引。

SDgetinfo: 检索数据集的名称、维数、维度大小、数据类型和属性数量

intn SDgetinfo(int32 sds_id, char *sds_name, int32 *rank, int32 dimsizes[], int32 *data_type, int32 *num_attrs)

sds_id:(IN)SDcreate 和 SDselect 返回的数据集标识符
sds_name:(OUT)数据集的名称
rank:(OUT)数据集中的维数
dimsizes[ ]:(OUT)包含数据集中每个维度的大小的数组
data_type:(OUT)存储在数据集中的数据的数据类型
num_attrs:(OUT)数据集的属性数

返回值:如果成功则返回 SUCCEED(或 0),否则返回 FAIL(或 -1)。

描述:SDgetinfo 获取由 sds_id 标识的数据集的名称、维度数、维度大小、数据类型和属性数,分别存储在参数 sds_name、rank、dimsizes、data_type 和 num_attrs 中。 缓冲区 sds_name 最多可以有 64 个字符。如果不需要数据集的名称,则可以在 C 中将参数 sds_name 设置为 NULL,在 Fortran 中将参数设置为空字符串。 rank 参数的最大值是 MAX_VAR_DIMS(或 32)。 如果创建的数据集是无限维度的,那么在C接口中,dimsizes数组的第一个元素(对应变化最慢的维度)包含无限维度最终的记录数;在 FORTRAN-77 接口中,dimsizes 数组的最后一个元素(对应于变化最慢的维度)包含此信息。使用 SDisrecord 确定数据集是否具有无限维度。

 SDendaccess:终止对数据集的访问

intn SDendaccess(int32 sds_id)

sds_id:(IN)SDcreate 或 SDselect 返回的数据集标识符

返回值:如果成功则返回 SUCCEED(或 0),否则返回 FAIL(或 -1)。

描述:SDendaccess 释放 HDF 库的数据结构占用的内存,这些数据结构专用于由参数 sds_id 标识的数据集。 在对指定数据集的所有操作完成后未能调用此例程可能会导致数据丢失。 每次调用 SDcreate 或 SDselect 时必须调用此例程一次。

SDgetdatastrs:检索数据集的预定义属性

intn SDgetdatastrs(int32 sds_id, char *label, char *unit, char *format, char *coordsys, intn length)

sds_id:(IN)SDcreate 或 SDselect 返回的数据集标识符
label:(OUT)标签(预定义属性)
unit:(OUT)单位(预定义属性)
format:(OUT)格式(预定义属性)
coordsys:(OUT)坐标系(预定义属性)
length:(OUT)上述预定义属性的最大长度

返回值:如果成功则返回 SUCCEED(或 0),否则返回 FAIL(或 -1)。

描述:SDgetdatastrs 检索参数 sds_id 指定的数据集的预定义属性。预定义的属性是标签、单位、格式和坐标系。然后将它们分别存储在参数 label、unit、format 和 coordsys 中。有关预定义属性的更多信息,请参阅 HDF 用户指南的第 3.10 节。 如果未存储特定数据字符串,则相应 SDgetdatastrs 参数的第一个字符为“\0”。每个字符串缓冲区必须包含用于保存空终止字符的空间。如果用户不希望返回字符串,则可以为该字符串传入 NULL。数据字符串由 SDsetdatastrs 例程设置。

SDreaddata:从数据集或坐标变量中读取数据的子样本

intn SDreaddata(int32 sds_id, int32 start[], int32 stride[], int32 edge[], VOIDP buffer)

sds_id:(IN)SDcreate 或 SDselect 返回的数据集标识符
start:(IN)指定读取数据的起始位置的数组
stride:(IN)指定将沿每个维度读取的值之间的间隔的数组
edge:(IN)指定沿每个维度读取的值的数量的数组
buffer:(OUT)缓冲区存储读取的数据

返回值:如果成功或数据集或坐标变量不包含数据,则返回 SUCCEED(或 0),否则返回 FAIL(或 -1)。

描述:SDreaddata 从参数 sds_id 标识的数据集或坐标变量中读取指定的数据子样本。读取的数据存储在buffer缓冲区中。子样本由参数 start、stride 和 edge 定义。 数组 start 指定读取子样本的起始位置。数组 start 中每个元素的有效值是从 0 到数据集对应维度的大小 - 1。维度大小由 SDgetinfo 返回。 数组edge指定沿每个数据集维度读取的值的数量。 数组stride指定沿每个维度的阅读模式。例如,如果数组 stride 的元素之一为 1,则沿数据集相应维度的每个元素都将被读取。如果数组stride的元素之一是2,那么沿着数据集的对应维度的每个其他元素都将被读取,依此类推。在 C 接口中指定 stride 值为 NULL 或在任一接口中将数组 stride 的所有值设置为 1 指定连续读取数据。如果数组stride中的所有值都设置为 0,则 SDreaddata 返回 FAIL(或 -1)。无论提供什么stride值,数据总是连续放置在缓冲区中。 使用 SDreaddata 从“分块”数据集中读取数据时,应考虑 HDF 用户手册第 3 章标题为“科学数据集 (SD API)”和 HDF 用户手册第 13 章的分块部分中提出的问题手册,标题为 HDF 性能问题。 请注意,此例程有两个 FORTRAN-77 版本; sfrdata 和 sfrcdata。 sfrdata 例程读取数字科学数据,sfrcdata 读取字符科学数据。


输出


DFSDsetdims/dssdims: 为写入文件的所有后续科学数据集设置维度和维度大小

intn DFSDsetdims (intn rank, int32 dimsizes[]);

rank:(IN)维度
dimsizes[ ]:(IN)包含每个维度大小的数组

返回值:如果成功则返回 SUCCEED(或 0),否则返回 FAIL(或 -1)。

描述:此例程必须在调用 DFSDsetdimstrs 或 DFSDsetdimscale 之前调用。 如果没有调用其他设置例程并且在 DFSDputdata 或 DFSDadddata 中提供了正确的维度,则不需要调用  DFSDsetdims。 如果等级或维度大小发生变化,则清除所有先前的集合调用,但数据类型除外,它是通过调用 DFSDsetNT 设置的。

 DFSDsetNT/dssnt: 设置下次写入操作中要写入的数据的数据类型

intn DFSDsetNT(int32 data_type);

data_type:(IN)数据类型

返回值:如果成功则返回 SUCCEED(或 0),否则返回 FAIL(或 -1)。

描述:如果要存储非 float32 的数据类型,则必须调用 DFSDsetNT。 DFSDsetNT 和 DFSDsetdims 可以按任何顺序调用,但它们应该在任何其他 DFSDset* 函数之前以及 DFSDputdata 或 DFSDadddata 之前调用。 以下符号名称可用作 data_type 的值:

32-bit float

DFNT_FLOAT32

5

64-bit float

DFNT_FLOAT64

6

8-bit signed int

DFNT_INT8

20

8-bit unsigned int

DFNT_UINT8

21

16-bit signed int

DFNT_INT16

22

16-bit unsigned int

DFNT_UINT16

23

32-bit signed int

DFNT_INT32

24

32-bit unsigned int

DFNT_UINT32

25

8-bit character

DFNT_CHAR8

4

DFSDsetdatastrs/dssdast: 为写入文件的下一个数据集设置标签、单位、格式和坐标系

intn DFSDsetdatastrs(char *label, char *unit, char *format, char *coordsys);

label:(IN)描述数据的标签
unit:(IN)与数据一起使用的单位
format:(IN)用于显示数据的格式
coordsys:(IN)数据坐标系

返回值:如果成功则返回 SUCCEED(或 0),否则返回 FAIL(或 -1)。

DFSDsetrange/dssrang: 存储指定的最大和最小数据值

intn DFSDsetrange(VOIDP max, VOIDP min);

max:(IN)范围内的最大值
min:(IN)范围内的最小值

返回值:如果成功则返回 SUCCEED(或 0),否则返回 FAIL(或 -1)。

描述:假设 max 和 min 的数据类型与数据的类型相同。这意味着在 C 版本的 DFSDsetrange 中,参数是指针,而不是简单变量,而在 FORTRAN-77 版本中,它们是与数据数组相同类型的简单变量。 该例程不计算最大值和最小值;它只存储给定的值。因此,最大值和最小值可能并不总是反映数据数组中的实际最大值和最小值。 当最大值和最小值写入文件时,保存这些值的 HDF 元素被清除,因为假设后续数据集的最大值和最小值将具有不同的值。

DFSDadddata/dsadata: 如果文件存在,则将整个科学数据集附加到现有 HDF 文件;如果不是,则创建一个新文件。

intn DFSDadddata(char *filename, intn rank, int32 dimsizes[], VOIDP data);

filename:(IN)HDF 文件的名称
rank:(IN)要写入的数据数组中的维数
dimsizes[ ]:(IN)包含每个维度大小的数组
data:(IN)包含要存储的数据的数组

返回值:如果成功则返回 SUCCEED(或 0),否则返回 FAIL(或 -1)。

描述:除了将多维数据数组附加到 HDF 文件之外,DFSDadddata 还自动存储与数据集相关的任何信息。它不会覆盖文件中的现有数据。数组数据可以是任何有效类型。但是,如果 DFSDsetNT 没有设置数据类型,则假定数据为 float32 类型。 调用 DFSDadddata 将写入科学数据集和所有相关信息。也就是说,当调用 DFSDadddata 时,由 DFSDset* 调用设置的任何信息都将连同数据数组本身一起写入文件。

DFSDputdata/dspdata: 将科学数据和相关信息写入 HDF 文件

intn DFSDputdata(char *filename, intn rank, int32 dimsizes[], VOIDP data);

filename:(IN)HDF 文件的名称
rank:(IN)要写入的数据数组中的维数
dimsizes[ ]:(IN)包含每个维度大小的数组
data:(IN)包含要存储的数据的数组

返回值:如果成功则返回 SUCCEED(或 0),否则返回 FAIL(或 -1)。

描述:DFSDputdata 将通过破坏原始文件的内容将数据写入现有文件。 谨慎使用。 如果使用新的文件名,则 DFSDputdata 的功能与 DFSDadddata 完全相同。

https://www.rkriz.net/sv/classes/ESM4714/Gen_Prin/data_org/HDF/RM41r2b_HTML/RM_Section_II_SDLOP.fm.html

https://svn.ssec.wisc.edu/repos/geoffc/C/HDF4/Examples/HDFtraining/RefManual/RM_Section_II_SDLOP.fm.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值