[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: can structures be saved to an HDF file?
- Subject: Re: can structures be saved to an HDF file?
- From: "Liam Gumley" <Liam.Gumley(at)ssec.wisc.edu>
- Date: Wed, 8 Dec 1999 12:15:08 -0600
- Newsgroups: comp.lang.idl-pvwave
- Organization: University of Wisconsin, Madison
- References: <384C3477.62ECEA7E@fi.uib.no>
- Xref: news.doit.wisc.edu comp.lang.idl-pvwave:17665
Henrik E. Nilsen wrote:
> It seems to me that it would be very useful to be able to save a whole
> structure to an HDF file. Anyone know if such a routine exists?
The following program isn't fancy, but it's cheap.
;---cut here---
PRO HDF_SAVE_STRUCT, FILE, DATA
;- Check arguments
if n_elements(file) eq 0 then message, 'FILE is undefined'
if n_elements(data) eq 0 then message, 'DATA is undefined'
;- Get information about the input structure
info = size(data)
ndim = info[0]
type = info[ndim + 1]
if type ne 8 then message, 'DATA must be a structure'
ntags = n_tags(data)
names = tag_names(data)
;- Create the HDF file
hdfid = hdf_sd_start(file, /create)
;- Loop over each variable in the structure
for index = 0, ntags - 1 do begin
;- Get information about this variable
info = size(data.(index))
ndim = info[0]
if ndim gt 0 then dims = [info[1:ndim]] else dims = [1]
type = info[ndim + 1]
nele = info[ndim + 2]
;- Create the variable if supported by HDF
saveflag = 1
case type of
1 : varid = hdf_sd_create(hdfid, names[index], dims, /byte)
2 : varid = hdf_sd_create(hdfid, names[index], dims, /int)
3 : varid = hdf_sd_create(hdfid, names[index], dims, /long)
4 : varid = hdf_sd_create(hdfid, names[index], dims, /float)
5 : varid = hdf_sd_create(hdfid, names[index], dims, /double)
7 : varid = hdf_sd_create(hdfid, names[index], $
[strlen(data.(index))], /string)
else : begin
print, 'This variable type is not supported by HDF:'
help, data.(index)
saveflag = 0
end
endcase
;- Save the variable to the file
if saveflag eq 1 then begin
hdf_sd_adddata, varid, data.(index)
hdf_sd_endaccess, varid
endif
endfor
;- Close the HDF file
hdf_sd_end, hdfid
END
;---cut here---
IDL> data = {image:dist(256), name:'Test Image', flag:1, valid_range:[0L,
200L]}
IDL> hdf_save_struct, 'test.hdf', data
IDL> hdf_info, 'test.hdf'
Cheers,
Liam.
http://cimss.ssec.wisc.edu/~gumley