我的实验中有大量的.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文件数据的字符串名称的变量。我该如何解决这个问题?
答案 0 :(得分:2)
你实际想要这样做。 Even the Mathworks will tell你not 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