2013-07-18 76 views
1

我有一个名为'int'的变量,其中包含很多数据。我想找到一种方法来通过用户输入以编程方式重命名此变量。因此,我可以查询有关数据的用户标识信息,例如响应是'AA1',我想要将变量'int'重命名为'AA1'或将'AA1'变为与int相同的变量。MATLAB分配变量名称

使用输入命令会出现问题,因为它允许用户将值分配给已创建的变量,而不是实际创建变量名称。使用eval函数或其变体会帮助我实现这一目标吗?还是有更简单的方法?

谢谢!

+0

为什么你让用户重新命名变量?让用户影响程序的底层实现通常不是一个好主意。为什么不简单地将这些数据与用户指定的字符串相关联? –

+0

为什么变量被称为'int',为什么要重命名?它是其他人已经创建的变量吗? – NKN

+0

我有三个变量,“垂直”“诠释”和“时间”,代表垂直,强度和时间。我想将所有这些放入一个结构中,其名称取决于用户。这是针对AFM系统的,用户将输入正在测试的悬臂的名称。用户将要测试多个悬臂,我想要一种方式来记录每个悬臂的数据。因此重新命名,或创建另一个名称作为识别工具的变量 - 或结构。 –

回答

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); 
+0

我有三个变量,“垂直”“诠释”和“时间”,代表垂直,强度和时间。我想将所有这些放入一个结构中,其名称取决于用户。这是针对AFM系统的,用户将输入正在测试的悬臂的名称。用户将要测试多个悬臂,我想要一种方式来记录每个悬臂的数据。因此重新命名,或创建另一个名称作为识别工具的变量 - 或结构。 –

+0

@GregDimock,是的,那么你真的应该去关联数组。我在上面添加了一个明确的例子。 – John