Skip to content

Instantly share code, notes, and snippets.

@vividsnow
Created December 29, 2011 22:52
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save vividsnow/1536562 to your computer and use it in GitHub Desktop.
cdaweb CDF to PDL
#perl
use strict;
use warnings;
use feature 'say';
use CDF;
use PDL;
use Data::Dumper 'Dumper';
my ($id, @out);
CDF::CDFopen($ARGV[0], \$id);
CDF::CDFinquire($id, refstd([( undef, [], (undef) x 5 )])); pout();
for my $n (0..($out[-1] - 1)) { # dump attributes
CDF::CDFattrInquire($id, $n, refstd(3));
if ($out[2] > -1) {
pout();
for my $e (0..$out[2]) {
CDF::CDFattrGet($id, $n, $e, refstd(1)); pout();
}
}
}
CDF::CDFlib(SELECT_,CDF_, $id);
CDF::CDFlib(SELECT_,CDF_zMODE_, 2);
CDF::CDFlib(SELECT_,CDF_READONLY_MODE_, 0);
CDF::CDFlib(GET_,CDF_NUMzVARS_, refstd(1)) && pout();
for my $n (0..($out[0] - 1)) {
CDF::CDFlib(SELECT_, zVAR_, $n);
CDF::CDFlib(GET_, zVAR_NAME_, refstd(1)) && pout();
CDF::CDFlib(GET_, zVAR_DIMSIZES_, refstd([[]])) && pout();
CDF::CDFlib(GET_,zVAR_MAXREC_, refstd(1)) && pout();
}
if ($ARGV[1]) {
my $p = pdl(do {
CDF::CDFlib(GET_,zVARs_MAXREC_, refstd(1)) && pout();
my $v = [split(/,/, $ARGV[1])];
my $s = scalar(@$v);
[ map {
CDF::CDFlib(SELECT_,zVARs_RECNUMBER_, $_);
CDF::CDFlib(GET_,zVARs_RECDATA_, $s, $v, refstd([[]]));
$out[0];
} (0..($out[0] - 1)) ]
});
say join ',', $p->dims;
}
CDF::CDFclose($id);
sub refstd {
my $in = shift;
@out = ref($in) ? (@$in) : ((undef) x $in);
map defined($_) && $_ || \$_, @out;
}
sub pout { say Dumper(\@out) }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment