Currently, NCL does not have the ability to explicitly
separate different variable types in a single read.
This type of mixed type record is often best read via
a shared object.
PART 1:
*If* you had an even number of integers (eg, 4 or 6)
you could to do a "read twice". Let's say that
instead of 5 integers, you had 6. The 1st mixed type
record in NCL (0-based) is zero.
rnum = 0
idata = fbindirread(path, rnum, 6, "integer")
i1 = idata(0)
i2 = idata(1)
:
i5 = idata(4)
i6 = idata(5)
Then, a 2nd read for the type "double". The
ddata = fbindirread(path, rnum, -1, "double")
d = ddata(3:) ; skip 1st six 32-bit integers [3 double length]
=====
PART 2: Shared object
Don't know C++ but in fortran (untested).
C NCLFORTSTART
subroutine dongli(fpath, idata, ddata, rlen, rnum, ni, nd)
implicit none
charcter*(*) fpath
integer rlen, ni, nd, rnum, idata(ni)
double precision ddata(nd)
C NCLEND
integer ientry, iunit, ier
data ientry /0/, iunit/58/
if (ientry.eq.0) then
c open only once
open (lsunit,file=fpath
* ,access='direct'
* ,form='unformatted'
* ,recl=rlen
* ,status='old',iostat=ier)
end if
read (iunit,rec=rnum) idata, ddata
return
end
From the command line: if the above was named dongli.f
%> WRAPIT dongli.f
Then in NCL
external READ "./dongli.so"
ni = 5
nd = ???
idata = new (5, "integer")
ddata = new (???, "double")
rlen = ni*4 + nd*8 ; rec length in bytes for fortran
diri = "./" ; input directory
fili = "foo" ; name of C++ created binary file
path = diri + fili
rnum = 1 ; fortran is 1-based; read 1st record
READ::dongli(path, idata, ddata, rlen, rnum, ni, nd)
On 12/17/10 5:11 AM, DONG Li wrote:
> Dear all,
>
> I have generated a binary data using C++, and I want to read it in the NCL. There seems to be no record concept in the C++, so I have chosen "fbindirread" to do this job, but what does "rec_num" mean here? The content of the binary looks like:
>
> 1 (int)
> 2 (int)
> 3 (int)
> -999 (int)
> 12 (int)
> ... (double)
> ... (double)
>
> I have read the first five integers, but the "double" is not right. Any advice?
>
> Best regards,
>
> DONG Li
>
>
> _______________________________________________
> ncl-talk mailing list
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Fri Dec 17 07:04:23 2010
This archive was generated by hypermail 2.1.8 : Wed Dec 22 2010 - 16:10:23 MST