📄 ncmkmask.m
字号:
function theResult = ncmkmask(inFile, outFile, fillValue)
% ncmkmask -- Make a NetCDF "mask" file.
% ncmkmask('inFile', 'outFile', fillValue) creates a "mask"
% file named 'outFile', based on the 'inFile'. The output
% variables have the names and dimensions of the input
% variables, but they contain byte-data, filled with the
% given fillValue (default = 0). Attributes are ignored.
% If a file is entered as an open "netcdf" object, it
% will remain open at the end of this routine. Use '*'
% to open a file via dialog.
% Copyright (C) 1999 Dr. Charles R. Denham, ZYDECO.
% All Rights Reserved.
% Disclosure without explicit written consent from the
% copyright owner does not constitute publication.
% Version of 06-Jan-1999 17:59:45.
VERBOSE = 1;
if nargout > 0, theResult = []; end
if nargin < 1, help(mfilename); end
if nargin < 1, inFile = '*'; end
if nargin < 2, outFile = '*'; end
if nargin < 3, fillValue = 0; end
if ischar(fillValue), fillValue = eval(fillValue); end
% Input file.
if isa(inFile, 'netcdf')
f = inFile;
else
f = netcdf(inFile, 'nowrite');
end
if isempty(f), return, end
% Output file.
if isa(outFile, 'netcdf')
g = outFile;
elseif any(outFile == '*')
[p, outFile, e, v] = fileparts(name(f));
outFile = ['*' outFile '.msk'];
g = netcdf(outFile, 'clobber');
else
g = netcdf(outFile, 'noclobber');
end
if isempty(g) & ~isa(inFile, 'netcdf')
close(f)
return
end
% Creation information.
g.CreatedBy = mfilename;
g.CreatedOn = datestr(now);
g.BasedOnFile = name(f);
% Transfer the dimensions.
if VERBOSE
disp([' ## Data File: ' name(f)])
disp([' ## Mask File: ' name(g)])
disp(' ## Defining dimensions ...')
end
d = dim(f);
for i = 1:length(d)
if isrecdim(d{i})
theLength = 0; % Record-dimension.
else
theLength = length(d{i});
end
if VERBOSE, disp([' ## ' name(d{i}) ' ...']), end
g(name(d{i})) = theLength;
end
% Re-create the variables as "byte" data.
if VERBOSE, disp(' ## Defining variables ...'), end
v = var(f);
for i = 1:length(v)
if VERBOSE, disp([' ## ' name(v{i}) ' ...']), end
d = ncnames(dim(v{i})); % Dim. names.
g{name(v{i})} = ncbyte(d{:}); % New variable.
g{name(v{i})}.FillValue_ = fillValue; % Fill it.
end
g = endef(g);
% Expand record-variables, if any.
r = recdim(g);
if ~isempty(r)
if VERBOSE, disp(' ## Filling record-variables ...'), end
v = var(r);
for i = 1:length(v)
if VERBOSE, disp([' ## ' name(v{i}) ' ...']), end
sz = ncsize(f{name(v{i})});
for i = 1:length(sz)
indices{i} = sz(i);
end
v{i}(indices{:}) = fillValue;
end
end
% Done.
if VERBOSE, disp(' ## Done.'), end
if ~isa(outFile, 'netcdf'), close(g), end
if ~isa(inFile, 'netcdf'), close(f), end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -