在matlab工作区中从单元格数组中获取变量名称的字符串

时间:2016-05-01 12:20:40

标签: matlab csv variables workspace

我的实验中有大量的.csv文件(200多个),以前我一直在单独阅读它们,以及我的数据处理后续步骤,这是一项繁琐的工作。

co_15 = csvread('CO_15K.csv',5,0);
co_25 = csvread('CO_25K.csv',5,0);
co2_15 = csvread('CO2_15K.csv',5,0);
co2_80 = csvread('CO2_80K.csv',5,0);
h2o_15 = csvread('H2O_15K.csv',1,0);
etc.....

所以我想在代码的开头创建一个像这样的单元格,然后是一个只能自动读取它们的for循环。

input = {'co_15' 5;'co_25' 5;...
         'co2_15' 5; 'co2_80' 5;...
         'h2o_15' 1; 'h2o_140' 1;...
         'methanol_15' 5;'methanol_120' 5;'methanol_140' 5;...
         'ethanol_15' 5;'ethanol_80' 1;'ethanol_140' 5;...
         'co2_ethanol_15' 5 ;'co2_ethanol_80' 5;...
         'h2o_ethanol_15' 1 ;'h2o_ethanol_140' 1;...
         'methanol_ethanol_15' 5;'methanol_ethanol_120' 5;'methanol_ethanol_140' 5};

for n = 1:size(input,1)
    input{n,1} = csvread(strcat(input{n,1},'k.csv'),input{n,2},0);
end

此代码中的单元格为19行和2列,行是所有文件,列将包含处理数据的参数。现在我无法找到解决方案的问题是我的第一列是一个字符串名称,我希望该字符串名称是csvread将数据写入的变量的名称,但我现在设置它的方式只需使用csv数据覆盖单元格第一列中的字符串。为了更清楚,我希望我的matlab工作区在第一列中包含包含我的csv文件数据的字符串名称的变量。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

实际想要这样做。 Even the Mathworks will tellnot to do this。如果您尝试使用变量名称来跟踪这样的相关数据,那么始终是一个更好的数据结构来保存您的数据。

一种方法是拥有一个单元阵列

data = cell(size(input(:,1)));
for n = 1:size(input,1)
    data{n} = csvread(strcat(input{n,1},'k.csv'),input{n,2},0);
end

另一个好的选择是使用struct。您可以拥有一个struct,其中包含与您的数据相对应的动态字段名称。

data = struct();
for n = 1:size(input,1)
    data.(input{n,1}) = csvread(strcat(input{n,1},'k.csv'),input{n,2},0);
end

或者实际创建一个结构数组,并在结构中保存名称​​和

for n = 1:size(input, 1)
    data(n).name = input{n,1};
    data(n).data =  csvread(strcat(input{n,1},'k.csv'),input{n,2},0);
end

如果你绝对坚持这样做(再次,它非常推荐),那么你可以使用eval来做到这一点:

for n = 1:size(input, 1)
    data = csvread(strcat(input{n,1},'k.csv'),input{n,2},0);
    eval([input{n, 1}, '= data;']);
end