📄 ncvar.m
字号:
function self = ncvar(theVarname, theVartype, theDimnames, theNetcdf)
% ncvar/ncvar -- Constructor for ncvar class.
% ncvar('theVarname', 'theVartype', {theDimnames}, theNetcdf) allocates
% an "ncvar" object with 'theVarname', 'theVartype', and {theDimnames},
% in theNetcdf, a netcdf object. The re-direction syntax is
% theNetcdf < ncvar('theVarname', 'theVartype', {theDimnames}).
% The result is assigned silently to "ans" if no output argument
% is given.
% ncvar('theVarname', theNetcdf) returns an ncvar object that
% represents the existing variable named 'theVarName' in theNetcdf.
% ncvar('', 'theVartype', {theDimnames}) returns an ncvar object for:
% theNetcdf{'theVarname'} = ncvar('theVartype', {theDimnames}).
% ncvar (no argument) returns a generic "ncvar" object, suitable
% for use as a composite variable.
% ncvar (no argument) returns a raw "ncvar" object.
% Copyright (C) 1996 Dr. Charles R. Denham, ZYDECO.
% All Rights Reserved.
% Disclosure without explicit written consent from the
% copyright owner does not constitute publication.
% Version of 07-Aug-1997 15:55:19.
% Updated 14-Jan-2002 13:05:12.
if nargin < 1 & nargout < 1
help(mfilename)
return
end
if nargout > 0, self = []; end
% Basic structure.
theStruct.itsVartype = '';
theStruct.itsDimnames = {''};
theStruct.itsOrientation = [];
theStruct.itsSubset = [];
theStruct.itsOffset = [];
theStruct.itsOrigin = [];
theStruct.itsVars = {};
theStruct.itsSrcsubs = {};
theStruct.itsDstsubs = {};
theStruct.itsSlice = [];
% Raw "ncvar" object.
if nargin < 1 & nargout > 0
self = class(theStruct, 'ncvar', ncitem);
return
end
if nargin == 1 & isa(theVarname, 'ncitem')
theNCItem = theVarname;
if varid(theNCItem) >= 0
result = ncvar(name(theNCItem), netcdf(ncid(theNCItem)));
else
result = [];
end
if nargout > 0
self = result;
else
ncans(result)
end
return
end
if nargin == 2
theNetcdf = theVartype;
theNCid = ncid(theNetcdf);
switch class(theVarname)
case 'char'
[theVarid, status] = ncmex('varid', theNCid, theVarname);
case 'double'
theVarindex = theVarname;
theVarid = theVarindex-1;
[theVarname, theVartype, theVarndims, theVardimids, theVarnatts, status] = ...
ncmex('varinq', theNCid, theVarid);
otherwise
status = -1;
warning(' ## Illegal syntax')
end
if status >= 0
theStruct.itsVartype = theVartype;
result = class(theStruct, 'ncvar', ...
ncitem(theVarname, theNCid, -1, theVarid));
else
result = [];
end
if nargout > 0
self = result;
else
ncans(result)
end
return
end
theNCid = -1;
if nargin > 3, theNCid = ncid(theNetcdf); end
if strcmp(theVartype, 'int'), theVartype = 'long'; end
if isa(theDimnames, 'cell')
if length(theDimnames) == 1
theDimnames = theDimnames{1};
end
end
if isstr(theDimnames), theDimnames = {theDimnames}; end
theDimids = zeros(1, length(theDimnames)) - 1;
for i = 1:length(theDimnames)
theDimids(i) = ncmex('dimid', theNCid, theDimnames{i});
end
status = 0;
theVarid = -1;
if theNCid ~= -1
[theVarid, status] = ncmex('varid', theNCid, theVarname);
if status < 0
namelen = max(length(theVarname), fatnames(theNetcdf));
theTempname = setstr(zeros(1, namelen) + abs('-'));
[theVarid, status] = ncmex('vardef', theNCid, theTempname, ...
theVartype, -1, theDimids);
if status < 0
status = ncmex('redef', theNCid);
if status >= 0
[theVarid, status] = ncmex('vardef', theNCid, theTempname, ...
theVartype, -1, theDimids);
end
end
if status >= 0 & ~strcmp(theVarname, theTempname)
isFatNames = any(fatnames(theNetcdf));
if isFatNames, theNetcdf = endef(theNetcdf); end
status = ncmex('varrename', theNCid, theVarid, theVarname);
if isFatNames, theNetcdf = redef(theNetcdf); end
end
end
end
if status >= 0
theStruct.itsVartype = theVartype;
theStruct.itsDimnames = theDimnames;
theStruct.itsSlice = zeros(1, length(theDimnames));
result = class(theStruct, 'ncvar', ...
ncitem(theVarname, theNCid, -1, theVarid));
else
result = [];
end
if nargout > 0
self = result;
else
ncans(result)
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -