⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datatype.m

📁 MATLAB中读写、处理科学数据文件格式NETCDF的程序
💻 M
字号:
function theResult = datatype(self, theNewDatatype)

% ncvar/datatype -- Numeric type of an ncatt object.
%  datatype(self) returns the numeric type of self,
%   an "ncvar" object.  The allowed datatypes are:
%   {'byte', 'char', 'short', 'long', 'float', 'double'}.
%  datatype(self, 'theNewDatatype') changes the datatype
%   of self to 'theNewDatatype'.  The NetCDF file itself
%   must be writeable.  The function will also reset the
%   datatype of the associated "_FillValue" (if any) to
%   the same new type.  The new self is returned.
 
% Copyright (C) 1997 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 09:42:59.

if nargin < 1, help(mfilename), return, end

result = '';

theTypes = {'byte', 'char', 'short', 'long', 'float', 'double'};

theNCid = ncid(self);

% Get the existing datatype.

if theNCid >= 0
   theVarid = varid(self);
   [theName, theType, theNdims, theDimids, theNatts, status] = ...
      ncmex('varinq', theNCid, theVarid);
   if status >= 0 & ~isstr(theType)
      theType = theTypes{theType};
   end
else
    theType = self.itsVartype;
end

result = theType;

% Change the datatype.

if nargin > 1
    theNetCDF = parent(self);
    switch lower(permission(theNetCDF))
    case {'nowrite'}
        disp([' ## No "' mfilename '" action taken; ' ...
              'file "' name(theNetCDF) '" permission is "nowrite".'])
        if nargout > 0
            theResult = self;
        else
            disp(self)
        end
        return
    end
    theVarname = name(self);
    theTempname = theVarname;
    theTempname(:) = '_';
    self = name(self, theTempname);
    theDimnames = ncnames(dim(self));
    theNetCDF{theVarname} = feval(['nc' theNewDatatype], theDimnames{:});
    theVar = theNetCDF{theVarname};
    theAtts = att(self);
    for i = 1:length(theAtts)
        copy(theAtts{i}, theVar)
    end
    if ~isempty(fillval(self))
        fillval(theVar, fillval(self));
    end
    theData = self(:);
    if ~isempty(theData)
        theVar(:) = theData;
    end
    theChangedNetCDF = delete(self);
    result = theChangedNetCDF{theVarname};
end

if nargout > 0
   theResult = result;
else
   disp(result)
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -