function keep(varargin); %KEEP keeps the caller workspace variables of your choice and clear the rest. % Its usage is just like "clear" but only for variables. % % Xiaoning (David) Yang xyang@lanl.gov 1998 % Revision based on comments from Michael McPartland, % michael@gaitalf.mgh.harvard.edu, 1999 % Keep all if isempty(varargin) return end % See what are in caller workspace wh = evalin('caller','who'); % Check workspace variables if isempty(wh) error(' There is nothing to keep!') end % Construct a string containing workspace variables delimited by ":" variable = []; for i = 1:length(wh) variable = [variable,':',wh{i}]; end variable = [variable,':']; % Extract desired variables from string flag = 0; for i = 1:length(varargin) I = findstr(variable,[':',varargin{i},':']); if isempty(I) disp([' ',varargin{i}, ' does not exist!']) flag = 1; elseif I == 1 variable = variable(1+length(varargin{i})+1:length(variable)); elseif I+length(varargin{i})+1 == length(variable) variable = variable(1:I); else variable = [variable(1:I),variable(I+length(varargin{i})+2:length(variable))]; end end % No delete if some input variables do not exist if flag == 1 disp(' No variables are deleted!') return end % Convert string back to cell and delete the rest I = findstr(variable,':'); if length(I) ~= 1 for i = 1:length(I)-1 if i ~= length(I)-1 del(i) = {[variable(I(i)+1:I(i+1)-1),' ']}; else del(i) = {variable(I(i)+1:length(variable)-1)}; end end evalin('caller',['clear ',del{:}]) end