我有一个名为'int'的变量,其中包含很多数据。我想找到一种方法来通过用户输入以编程方式重命名此变量。因此,我可以查询有关数据的用户标识信息,例如响应是'AA1',我想要将变量'int'重命名为'AA1'或将'AA1'变为与int相同的变量。MATLAB分配变量名称
使用输入命令会出现问题,因为它允许用户将值分配给已创建的变量,而不是实际创建变量名称。使用eval函数或其变体会帮助我实现这一目标吗?还是有更简单的方法?
谢谢!
我有一个名为'int'的变量,其中包含很多数据。我想找到一种方法来通过用户输入以编程方式重命名此变量。因此,我可以查询有关数据的用户标识信息,例如响应是'AA1',我想要将变量'int'重命名为'AA1'或将'AA1'变为与int相同的变量。MATLAB分配变量名称
使用输入命令会出现问题,因为它允许用户将值分配给已创建的变量,而不是实际创建变量名称。使用eval函数或其变体会帮助我实现这一目标吗?还是有更简单的方法?
谢谢!
只是为了记录,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);
我有三个变量,“垂直”“诠释”和“时间”,代表垂直,强度和时间。我想将所有这些放入一个结构中,其名称取决于用户。这是针对AFM系统的,用户将输入正在测试的悬臂的名称。用户将要测试多个悬臂,我想要一种方式来记录每个悬臂的数据。因此重新命名,或创建另一个名称作为识别工具的变量 - 或结构。 –
@GregDimock,是的,那么你真的应该去关联数组。我在上面添加了一个明确的例子。 – John
为什么你让用户重新命名变量?让用户影响程序的底层实现通常不是一个好主意。为什么不简单地将这些数据与用户指定的字符串相关联? –
为什么变量被称为'int',为什么要重命名?它是其他人已经创建的变量吗? – NKN
我有三个变量,“垂直”“诠释”和“时间”,代表垂直,强度和时间。我想将所有这些放入一个结构中,其名称取决于用户。这是针对AFM系统的,用户将输入正在测试的悬臂的名称。用户将要测试多个悬臂,我想要一种方式来记录每个悬臂的数据。因此重新命名,或创建另一个名称作为识别工具的变量 - 或结构。 –