在工作区中查找和重命名变量(如果存在任何名称)
Posted
技术标签:
【中文标题】在工作区中查找和重命名变量(如果存在任何名称)【英文标题】:Find & rename variable in workspace, if either names exist 【发布时间】:2016-02-23 15:18:28 【问题描述】:如何从可能的名称列表中搜索 Workspace 中的变量名称,然后重命名现有变量并使用其数据。
例子:
A_apple_tree = [2;2;1;4];
AppleTree = [2;2;1;4];
Apple_tree_a5 = [2;2;1;4];
是同一个变量,但名称不同。 我想扫描工作区变量,直到找到一个,然后将其重命名为:
Apple_Tree = [2;2;1;4];
以下代码使用部分字符串搜索显示变量,但是找到的变量名称包含在元胞数组中。使用cell2mat
会将包含变量名称的单元格转换为没有值的字符。
namesWorkspace = who;
outStr = regexpi(namesWorkspace, 'apple');
ind = ~cellfun('isempty',outStr);
vars = namesWorkspace(ind);
Apple_Tree = cell2mat(vars);
Apple_Tree = 'apple_tree_a5' %%%..... instead of values for apple_tree_a5;
我如何调用现有变量及其数据以供以后使用?
谢谢,
【问题讨论】:
这通常表示数据类型选择不当。变量的 name 永远不应该用来表示任何东西。有更好的数据结构来存储这些信息:arrays
、containers.Map
用于键/值对等)请重新考虑您的设计。
【参考方案1】:
我假设所有给定的变量都包含相同的数据,因此您可以只使用第一次出现的数据。只需在基础工作区中通过evalin
分配它:
Apple_Tree = evalin('base',vars1)
考虑到没有匹配的变量名的情况,我会包含一个try/catch
语句并抛出一个错误。更通用的解决方案是将evalin
与assignin
结合起来,这样您就可以定义一个字符串,例如'apple'
并创建一个名为 apple
的变量,其中包含任何 apple-esk 变量的数据。
fruit = 'orange';
namesWorkspace = who;
vars = namesWorkspace(~cellfun('isempty',regexpi(namesWorkspace, fruit)));
try
assignin('base',fruit,evalin('base',vars1))
catch
error('No matching variable name!')
end
【讨论】:
非常感谢您的帮助。以上是关于在工作区中查找和重命名变量(如果存在任何名称)的主要内容,如果未能解决你的问题,请参考以下文章