[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Fixed problem



Steve,

I was extremely busy yesterday so I couldn't remember the syntax for the
multidimensional arrarys, etc. I modified the the example you sent, using
the 1st dim as unlimited, thats what my understanding was yesterday.
The original example is dependent on the manner that perl stores
strings in arrays thats why the padstr function is used so one gets
what one expects. Sometime the API don't work as expected. Don't
ever think I will not answer a question, sometimes I need time to get to
the problem.

Robb...

atachment sent

On Thu, 18 Nov 1999, Steve Diggs wrote:

> Robb,
> 
> Thanks for all of your help.  I'm eager to see what you came up with, but
> I think that I solved the problem.  I've attached a zipfile which is an
> email exchange that you guys had a little while back with a user that was
> almost as annoying as me!
> 
> Let me know what you think.
> 
> -sd
> --
> --------------------------------------------------------------------
> Steve Diggs                                   Voice: (858)534-1108
> Scripps Institution of Oceanography           FAX  : (858)534-7383
> WOCE Hydrographic Program Office/STS          EMAIL: address@hidden
> 9500 Gilman Drive                             WWW  : whpo.ucsd.edu
> La Jolla, CA 92093-0214
> --------------------------------------------------------------------
> 

===============================================================================
Robb Kambic                                Unidata Program Center
Software Engineer III                      Univ. Corp for Atmospheric Research
address@hidden             WWW: http://www.unidata.ucar.edu/
===============================================================================
#!/opt/bin/perl
  use NetCDF ;
  $ncid   = NetCDF::create("demo.nc", NetCDF::CLOBBER ) ;
  $dimid = NetCDF::dimdef($ncid, 'recNum', NetCDF::UNLIMITED);
  $stadim = NetCDF::dimdef($ncid,"stations",10) ;
  $strlen = 10 ;
  $strdim = NetCDF::dimdef($ncid,"strlen", $strlen) ;
  $varid  = NetCDF::vardef($ncid,"station",NetCDF::CHAR,[$dimid,$strdim]);
  NetCDF::endef($ncid) ;

  @names = ( "abcdef", "ABCDEF","A", "B", "C", "D", "E", "F", "G", "H" ) ;
  for ($i = 0 ; $i < 10 ; $i++ ) {
      $names[ $i ] = padstr( $names[ $i ], $strlen ) ;
      NetCDF::varput( $ncid, $varid, [$i,0], [1, $strlen], \$names[ $i ] ) ;
      #NetCDF::varput( $ncid, $varid, [$i,0], [1,10], "??????????" ) ;
      }

  #NetCDF::varput( $ncid, $varid, [3,2], [2,7], \@names ) ;

  NetCDF::close($ncid) ;

        
# pad str to correct length
sub padstr
{
( $str, $len ) = @_ ;

my( $size, $i ) ;

$size = length( $str ) ;

for( $i = $size; $i < $len; $i++ ) {
        $str .= "\0" ;
        #print "$str,\n" ;
}
if( $size > $len ) {
        print STDOUT "String length is over $len chars long:\n $str\n" ;
        $str = substr( $str, 0, $len ) ;
        #exit 0 ;
}
return $str ;
}
__END__

And this is what I get from ncdump:

ncdump demo.nc
netcdf demo {
dimensions:
        recNum = UNLIMITED ; // (10 currently)
        stations = 10 ;
        strlen = 10 ;
variables:
        char station(recNum, strlen) ;
data:

 station =
  "abcdef",
  "ABCDEF",
  "A",
  "B",
  "C",
  "D",
  "E",
  "F",
  "G",
  "H" ;
}