Loop file- and variablenames when importing
2 次查看(过去 30 天)
显示 更早的评论
I want to make a loop that loops over the number 2011 in the following script.
[~, ~, raw] = xlsread('adress\*2011*.xlsx','B8:I18'); *H2011 *= reshape([raw{:}],size(raw));
[~, ~, raw] = xlsread('adress\*2011*.xlsx','B28:I38'); *G2011 *= reshape([raw{:}],size(raw));
As you can see, "2011" is the filename, but also used in the matrix definitions (H2011, G2011). Also, I call on a specific cell range from the excelfiles (B8:I18, b28:I38 etc).
I have several excelfiles with names "2011", "2012", "2013_1", "2014_1", "2014_1s2" and "2014_1s5". Instead of repeating the excact same commands as aboove by changing "2011" in the filaname and matrix name for all the names mentioned, I wish to make a loop that does this. Does anybody have suggestions?
0 个评论
回答(1 个)
Jan
2013-5-6
Name = {'2011', '2012', '2013_1', '2014_1', '2014_1s2', '2014_1s5'};
n = length(Name);
H = struct('Data', cell(1, n), 'Name', cell(1, n));
G = struct('Data', cell(1, n), 'Name', cell(1, n));
for iName = 1:n
aName = Name{iName};
[~, ~, raw] = xlsread(sprintf('adress\%s.xlsx', aName),'B8:I18');
H(i).Name = aName;
H(i).Data = reshape([raw{:}],size(raw));
[~, ~, raw] = xlsread('adress\*2011*.xlsx','B28:I38');
G(i).Name = aName;
G(i).Data = reshape([raw{:}],size(raw));
end
Do not hide important information in the name of a variable. This would increase the complexity of the methods, required to operate on the data. It is trivial to expand the above method to further 1000 files, while hard coding the names like "G2011" will lead to troubles soon. Using EVAL to create such names dynamically is a bad idea also: 1. it slows down Matlab substantially, 2. it makes debugging so much harder that the program explodes up to a certain level of complexity.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!