function theResult = ncload(fileIn, varargin); % ncload -- Load NetCDF variables. % ncload('fileIn', 'var1', 'var2', ...) loads the % given variables of 'fileIn' into the Matlab % workspace of the "caller" of this routine. If no names % are given, all variables are loaded. if nargin < 1, help(mfilename), return, end result = []; if nargout > 0, theResult = result; end global useNativeMatlabNetcdf; if isempty(useNativeMatlabNetcdf); useNativeMatlabNetcdf = ~isempty(which('netcdf.open')); end; if (useNativeMatlabNetcdf); f = netcdf.open(fileIn, 'nowrite'); vars=ncvars(f); if isempty(varargin); varargin = vars; end; for i = 1:length(varargin) if sum(strcmp(vars,varargin{i}))>0; %get variable varid = netcdf.inqVarId(f,varargin{i}); aa=netcdf.getVar(f,varid); %inverse the order of dimensions if length(size(aa))>2|size(aa,2)~=1; bb=length(size(aa)); aa=permute(aa,[bb:-1:1]); end; %replace missing value with NaN [atts]=ncatts(f,varid); if strcmp(atts,'missing_value')&isreal(aa); spval = double(netcdf.getAtt(f,varid,'missing_value')); elseif strcmp(atts,'_FillValue')&isreal(aa); spval = double(netcdf.getAtt(f,varid,'_FillValue')); else; spval=[]; end; if ~isempty(spval); aa(aa==spval)=NaN; end; else; aa=[]; end; assignin('caller', varargin{i}, aa) end result = varargin; netcdf.close(f); else;%try to use old mex stuff f = netcdf(fileIn, 'nowrite'); if isempty(f), return, end if isempty(varargin), varargin = ncnames(var(f)); end for i = 1:length(varargin) if ~isstr(varargin{i}), varargin{i} = inputname(i+1); end oldfld = f{varargin{i}}(:); spval = f{varargin{i}}.missing_value(:); if isempty(spval); spval = f{varargin{i}}.FillValue_(:); end fld = oldfld; if ~isempty(spval)&~ischar(fld); replace = find(oldfld == spval); nreplace = length(replace); if nreplace>0 fld(replace) = NaN*ones(1,nreplace); end %if end %if %NaN-substitution messes up backward compatibility so I comment it out % assignin('caller', varargin{i}, fld); %and revert to oldfld assignin('caller', varargin{i}, oldfld) end result = varargin; close(f) if nargout > 0 theResult = result else ncans(result) end end