在工作区中查找和重命名变量(如果存在任何名称)

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 永远不应该用来表示任何东西。有更好的数据结构来存储这些信息:arrayscontainers.Map 用于键/值对等)请重新考虑您的设计。 【参考方案1】:

我假设所有给定的变量都包含相同的数据,因此您可以只使用第一次出现的数据。只需在基础工作区中通过evalin 分配它:

Apple_Tree = evalin('base',vars1)

考虑到没有匹配的变量名的情况,我会包含一个try/catch 语句并抛出一个错误。更通用的解决方案是将evalinassignin 结合起来,这样您就可以定义一个字符串,例如'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

【讨论】:

非常感谢您的帮助。

以上是关于在工作区中查找和重命名变量(如果存在任何名称)的主要内容,如果未能解决你的问题,请参考以下文章

嵌套对象解构和重命名

查找文件,原地重命名 unix bash

解析唯一数据和重命名文件

重命名文件时忽略错误58

如果文件存在,Powershell 移动项目重命名

管道字符串与变量中的文件夹到 findstr - 复制和重命名文件