【问题标题】:Accessing Matlab Workspace Variables with Dynamic Names使用动态名称访问 Matlab 工作区变量
【发布时间】:2014-07-23 00:12:55
【问题描述】:

快速提问。

我有一个列出不同名称的 excel 文件。我将这些名称导入 Matlab,执行计算,然后将数据保存为 .dat 文件。

例如:

Apple.dat: 2, 5, 50, 2993
Orange.dat: 5003, 292, 29, 2994
Banana.dat: 3992, 3, 39, 2995

然后我使用 eval 读取每个单独的 .dat 文件,并将数据/矩阵作为单独的变量加载到主工作区中。此时,我拥有 WorkSpace 中的所有变量以及包含此列表 (ListofVariables) 的单元格文件。

我的主要目标是在不知道变量名称的情况下访问每个变量 - 因为我的 excel 文档会随着时间而改变!但是,如果我输入:

ListofVariables(i,1)

它只会拉出“Apple”,而不是与变量 Apple 关联的数据。是否可以在不知道变量名的情况下访问变量数据?

感谢您的帮助!

【问题讨论】:

  • 更多关于你实际在做什么的细节会很有帮助。解决您的任务的关键可能在您的excel文件中,或者在您的处理和保存过程中,或者在您的加载过程中。作为一般提示:如果您的任务需要“评估”,那么您的方法有问题。
  • 谢谢乔治。我将重新评估保存每个文件。感谢您的宝贵时间!

标签: excel matlab variables workspace


【解决方案1】:

你可以使用 eval:

%// Simulate loading .dat files
apple = [2 5 50 2993];
orange = [5003 292 29 2994];
banana = [3992 3 39 2995];

ListofVariables = {'apple', 'orange', 'banana'};

%// load data to a structure    
data = [];
for k=1:numel(ListofVariables)
    name = ListofVariables{k};
    data = setfield(data, name, eval(name));
end
%//The data from all files is in the structure data

%// load data to a cell
data = {};
for k=1:numel(ListofVariables)
    name = ListofVariables{k};
    data(end+1) = eval(name);
end
%//The data from all files is in the cell (the names are lost, but you can access them by index, using the same order as ListofVariables)

【讨论】:

  • 非常感谢,Seb。我从没想过结构!
猜你喜欢
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多