I look for use HDF file with IDL.
I have problem for READ data. (with HDF_VSREAD)
I include below a small example.
Question: bug with IDL or bug with my code ?
Gilles Ratel
Email: ratel@toka.ireq-ccfm.hydro.qc.ca
note: machine OpenVMS AXP
IDL version 3.6.1a
attention: problem with IDL v 3.5.1 for HDF_VFGET
;=========================================================== =============
; HDF *** TEST ***
; ---------------------------------------------------------
; Suppose data with structure
; data = { X:0, Y:[0B,0B], Z:0B } <---- record
;
; X => type: INT , ORDER:1
; Y => type: BYTE , ORDER:2
; Z => type: BYTE , ORDER:1
;Define 3 records
A1 = [ 0B, 1B, 2B, 3B, 4B]
A2 = [ 0B, 5B, 6B, 7B, 8B]
A3 = [ 0B, 9B,10B,11B,12B]
; Stock into Byte array
data = BYTARR(5,3)
data(*,0) = A1
data(*,1) = A2
data(*,2) = A3
; Write HDF file
; -------------------------------------------------
fid = HDF_OPEN('TEST.HDF',/CREATE,/WRITE)
Vgroup= HDF_VATTACH(fid,-1,/WRITE)
HDF_VSETNAME,Vgroup,'DEMO'
HDF_VSETCLASS,Vgroup,'TEST'
Vdata = HDF_VSATTACH(fid,-1,/WRITE)
HDF_VSFDEFINE,VData,'X',/INT ,ORDER=1
HDF_VSFDEFINE,VData,'Y',/BYTE,ORDER=2
HDF_VSFDEFINE,VData,'Z',/BYTE,ORDER=1
HDF_VSSET, Vdata, NAME='Structure {X Y Z}',CLASS='TEST'
HDF_VSWRITE,Vdata,'X,Y,Z',data,NREC=3
HDF_VINSERT,Vgroup,VData
HDF_VSDETACH,Vdata
HDF_VDETACH,Vgroup
HDF_CLOSE,fid
; print data
PRINT,'WRITE data = '
PRINT,data
size_in = SIZE(data)
; Read HDF file
; -----------------------------------------------------
fid = HDF_OPEN('TEST.HDF',/READ)
vgid = HDF_VGETID(fid,-1)
vg = HDF_VATTACH(fid,vgid,/READ)
HDF_VGET,vg,class=vgclass,name=vgname,nentries=vgentries
PRINT,'Characteristics for Vgroup'
PRINT,'========================================'
print,'VG = ',Vgroup
PRINT,'VGclass= ',vgclass
PRINT,'VGname = ',vgname
PRINT,'VGentries= ',vgentries
PRINT,'========================================'
PRINT,' '
vsid = HDF_VSGETID(fid,-1)
vs = HDF_VSATTACH(fid,vsid,/READ)
HDF_VSGET,vs,class=vsclass,count=vscount,fields=vsfields, $
interlace=vsinterlace,name=vsname,nfields=vsnfields,$
size=vsize,tag=vstag,ref=vsref
PRINT,'Characteristics for Vsdata'
PRINT,'========================================'
print,'VS =',vs
PRINT,'VSclass =',vsclass
PRINT,'VScount =',vscount
PRINT,'VSfiels =',vsfields
PRINT,'VSinterlace=',vsinterlace
PRINT,'VSname =',vsname
PRINT,'VSnfields =',vsnfields
PRINT,'VSsize =',vsize
PRINT,'VStag =',vstag
PRINT,'VSref =',vsref
PRINT,'========================================'
PRINT,' '
HDF_VSETNAME,vg,'X,Y,Z'
PRINT,'Characteristics for Vsfields'
PRINT,'========================================'
FOR i=0,VSnfields-1 DO BEGIN
HDF_VFGET,vs,i,NAME=n,TYPE=t,SIZE=s,ORDER=o
PRINT,i,' NAME: ',n,' TYPE: ',t,' SIZE: ',s,' ORDER: ',o
ENDFOR
PRINT,'========================================'
PRINT,' '
VSnrecord = HDF_VSREAD(vs,data)
PRINT,'========================================'
PRINT,'READ data = '
PRINT,data
size_out = SIZE(data)
IF ((size_in(1) NE size_out(1)) OR (size_in(2) NE size_out(2))) THEN BEGIN
PRINT,' '
PRINT,'****************************************'
PRINT,'*** PROBLEM OF DIMENSION ***'
PRINT,'*** -------------------------------- ***'
PRINT,' SIZE(data input ) = ',size_in,FORMAT='(A21,5(1X,I2))'
PRINT,' SIZE(data output) = ',size_out,FORMAT='(A21,5(1X,I2))'
PRINT,'*** -------------------------------- ***'
PRINT,'****************************************'
ENDIF
END
|