【问题标题】:Rename a variable in the workspace through a list of names in a cell - MATLAB通过单元格中的名称列表重命名工作区中的变量 - MATLAB
【发布时间】:2016-09-28 14:12:46
【问题描述】:

我在 excel 文件中有一些数据。

首先,我读取文件并通过以下命令创建存储在单元格中的名称列表:

[status,sheets] = xlsfinfo(filename);

我得到:

sheets = {'A1','A2','B1','B2','C1'}; 

(这些是 excel 文件中 excelsheets 的名称)

通过一些过程,我获得了每个名称的矩阵(excelsheets)。每个的最终矩阵称为:

completeData = [x,v,z,y,s];

现在,我想:

  1. 将“completeData”变量的名称更改为每个对应的 excelsheet(来自“sheets”单元格)。

  2. 然后将这个新重命名的变量(旧的“completeData”)与其对应的 excelsheet 的名称一起保存(同样来自“sheets”单元格)。

到目前为止,我只设法通过以下命令分别保存每个 Excel 工作表生成的每个完整数据矩阵以及工作表的名称 [即第 2 点]:

save(sprintf('%s',sheets{excelSheet}),'completeData');     

(这里我在“excelsheet”上有一个循环)

问题是,当我管理 excel 工作表并将它们全部保存在我的硬盘的文件夹中时,每当我运行这些保存的变量中的任何一个时,我都会在工作区中得到“completeData”,这不是我想要的。我还想获取 excelsheet 的名称。

我该怎么做?

附:通过这个命令:

eval(sprintf([sheets{excelsheet} '=completeData;']));     

(再次在 excelsheet 上循环)

我已经设法创建了几个带有 Excel 工作表名称的矩阵。但是我不知道如何通过循环保存这些非常好的新创建的变量,这样我就不一一做了。

【问题讨论】:

  • 使用 eval 和拥有“动态变量”(改变名称/迭代创建的变量)都是可怕的编程实践。当你需要做其中任何一个时,这意味着你的算法已经过时了,而你只是在做着
  • @PeyM87 作为替代方案,您可以使用带有variable field names的结构体

标签: excel matlab matrix cell


【解决方案1】:

按照上面的cmets,我试着给你写一个简化的例子:

%% Initialise

names = {'name1', 'name2', 'name3'};
data  = randn(10, 3);

%% it create three fields called name1, name2 and name3 from data, in s

for ind=1:size(data, 2)
    s.(names{ind}) = data(:, ind);
end

希望对你有帮助!

【讨论】:

  • 稍作改动(在 FOR 循环的第一行之后添加“从 Excel 文件中读取 X 工作表名称”),效果非常好。谢谢。
【解决方案2】:

这就是它的工作原理:

初读信息:

[status,sheets] = xlsfinfo(filename);

NamesList = sheets(:,1);

现在,应用主要收集的信息再次阅读详细信息:

for ind = 1:length(NamesList)

    % Only read those particular sheets

    [num,txt,raw] = xlsread(filename,NamesList{ind,:});

    var.(NamesList{ind})={txt(:,MyColumn),num};

    clear num txt raw

end

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多