我有一个名为'int'的变量,里面有很多数据。我想找到一种方法来使用用户输入以编程方式重命名此变量。所以我可以查询有关数据的用户识别信息,比如响应是'AA1',我要么将变量'int'重命名为'AA1',要么'AA1'是一个与int相同的变量。
出现使用输入命令的问题,因为它允许用户为已创建的变量分配值,而不是实际创建变量名。使用eval函数或其变体可以帮助我实现这一目标吗?或者有更简单的方法吗?
谢谢!
答案 0 :(得分:2)
仅供记录,int
是一个相当差的变量名称选择。
除此之外,你可以按照以下方式做你想做的事情
说foo
是包含用户输入的字符串的变量。您可以执行以下操作:
% eliminate leading/trailing whitespace
foo = strtrim(foo);
a = regexp('[a-zA-Z][a-zA-Z0-9_]*',foo));
if numel(a) == 0
fprintf('Sorry, %s is not a valid variable name in matlab\n', foo);
elseif a ~= 1
fprintf('Sorry, %s is not a valid variable name in matlab\n', foo);
elseif 2 == exist(foo,'var')
fprintf('Sorry, %s already in use as a variable name.');
else
eval([foo,' = int']);
end
假设int
(现在foo
)是一个名为bar
的字段的结构,您可以按如下方式阅读条形码:
barVal = eval([foo,'.bar']);
这有点笨拙。
另一种方法是使用关联数组,让用户在数组中存储各种int值。关联数组的Matlab方法是Maps。这是我解决这个问题的首选方法。以下是使用与上述相同的变量的示例。
nameValueMap = containers.Map;
nameValueMap(foo) = int;
以上创建了foo
中存储的名称与变量int
中的数据之间的关联。
要获取数据,您只需执行以下操作:
intValue = nameValueMap(foo);