Re: Question about readAsciiTable

From: Saji Hameed <saji.nh_at_nyahnyahspammersnyahnyah>
Date: Tue Aug 24 2010 - 19:25:48 MDT

Gina,

I suggest beginning to use a Fortran lib from within NCL to read and write
ascii data. I am pasting some of the code I use to read ascii files. You can
integrate this with NCL using WRAPIT.
Within NCL, you can read your data as follows (not tested)

external FortRead "./ascii_read_helper.so"

funit=10
FortRead::open_file(funit,"ims2008349_24km.asc")
header=""
nhead=30
do i = 0, nhead-1
  FortRead::read_string(funit,header)
end do

var = new ( (/nrows,ncols/), "string")
FortRead:read_array(funit,var,nrows,ncols)
FortRead::close_file(funit)

Best wishes,

saji

--
1. save the below in a file named ascii_read_helper.f90
subroutine open_file(funit,fname)
  implicit none
  character(len=*) :: fname
  integer :: funit
  open(funit,file=fname,status="unknown",form="formatted")
  return
end
subroutine read_string(funit,line)
  implicit none
  integer funit
  character(len=*) :: line
  read(funit,*) line
  return
end
subroutine read_array(funit,val,nrow,ncol)
  implicit none
  integer, intent(in)::funit,nrow,ncol
  real, intent(out)  ::val(ncol,nrow)
  integer            ::i,j
  do j=1,nrow
   read(funit,*)(val(i,j),i=1,ncol)
  enddo
  return
end
subroutine close_file(funit)
  implicit none
  integer funit
  close(funit)
  return
end
2. save below in a file named  ascii_read_helper.stub
C NCLFORTSTART
        subroutine open_file(funit,fname)
        implicit none
        character*(*) fname
        integer funit
c NCLEND
C NCLFORTSTART
        subroutine read_string(funit,line)
        implicit none
        integer funit
        character*(*) line
c NCLEND
C NCLFORTSTART
        subroutine read_array(funit,val,nrow,ncol)
        implicit none
        integer funit,nrow,ncol
        dimension val(nrow,ncol)
c NCLEND
C NCLFORTSTART
        subroutine close_file(funit)
        implicit none
        integer funit
c NCLEND
On Wed, Aug 25, 2010 at 4:25 AM, Gina Henderson <ginah@udel.edu> wrote:
> Hi there,
>
> I am reading in ascii data but want to skip some header information.
> Previously I used the following to read a file with no header information
> and had no spaces so had to do some reformatting to read in correctly:
>
> ; The ascii data had no spaces so had to do some reformatting to read them
> correctly
>  zero_offset = charactertoshort(stringtocharacter("0"))
>
>  data_character = asciiread("ims2008349_24km.asc" ,(/nrows,ncols+1/),
> "character")
>  data_string = charactertoshort(data_character(:,:ncols-1)) -
> zero_offset(0)
>  delete(data_string@_FillValue)
>
>
> I want to do the same thing to a file with 30 lines of header information
> using readAsciiTable, so tried the following but got the error
> "fatal:_NclBuildArray: each element of a literal array must have the same
> dimension sizes, at least one item doesn't
> fatal:Execute: Error occurred at or near line 8073 in file
> $NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl". I think this has to
> do with the fact that I am reading the data in as type character, but don't
> know how to get around it while dealing with the no spaces issue?
>
> ; The ascii data had no spaces so had to do some reformatting to read them
> correctly
>  zero_offset = charactertoshort(stringtocharacter("0"))
>
>  nhead = 30  ; no. of header lines at the beginning of the file
>  data_character = readAsciiTable("ims2008349_24km.asc" ,(/nrows,ncols+1/),
> "character", nhead)
>  data_string = charactertoshort(data_character(:,:ncols-1)) -
> zero_offset(0)
>  delete(data_string@_FillValue)
>
> Any suggestions would be greatly appreciated.
> Thanks, Gina.
>
> _______________________________________________
> 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 Tue Aug 24 19:25:54 2010

This archive was generated by hypermail 2.1.8 : Wed Aug 25 2010 - 11:50:26 MDT