% -*- texinfo -*- % @deftypefn {Function File} {@var{varname} =} genvarname (@var{str}) % @deftypefnx {Function File} {@var{varname} =} genvarname (@var{str}, @var{exclusions}) % Create unique variable(s) from @var{str}. If @var{exclusions} is % given, then the variable(s) will be unique to each other and to % @var{exclusions} (@var{exclusions} may be either a string or a cellstr). % % If @var{str} is a cellstr, then a unique variable is created for each % cell in @var{str}. % % @example % @group % x = 3.141; % genvarname ('x', who ) % @result{} x1 % @end group % @end example % % If @var{wanted} is a cell array, genvarname will make sure the returned % strings are distinct: % % @example % @group % genvarname (@{'foo', 'foo'@}) % @result{} % @{ % [1,1] = foo % [1,2] = foo1 % @} % @end group % @end example % % Note that the result is a char array/cell array of strings, not the % variables themselves. To define a variable, @code{eval} can be % used. The following trivial example sets @code{x} to @code{42}. % % @example % @group % name = genvarname ('x'); % eval([name ' = 42']); % @result{} x = 42 % @end group % @end example % % Also, this can be useful for creating unique struct field names. % % @example % @group % x = struct ; % for i = 1:3 % x.(genvarname ('a', fieldnames (x))) = i; % end % @result{} % x = % @{ % a = 1 % a1 = 2 % a2 = 3 % @} % @end group % @end example % % Since variable names may only contain letters, digits and underscores, % genvarname replaces any sequence of disallowed characters with % an underscore. Also, variables may not begin with a digit; in this % case an underscore is added before the variable name. % % Variable names beginning and ending with two underscores '__' are valid but % they are used internally by octave and should generally be avoided, therefore % genvarname will not generate such names. % % genvarname will also make sure that returned names do not clash with % keywords such as 'for' and 'if'. A number will be appended if necessary. % Note, however, that this does @strong{not} include function names, % such as 'sin'. Such names should be included in @var{avoid} if necessary. % @seealso{isvarname, exist, tmpnam, eval} % @end deftypefn