Jack
Jack

Reputation: 317

MATLAB loop through excel files

My code is posted below. It does exactly what I need it to do.

It reads in a file and plots the data that I need. If I want to read in another file and have it go through the same code, without having to write the whole thing a second time with different variables, is that possible? I would like to store the matrices from each loop.

As you can see the file I get is called: Oxygen_1keV_300K.xlsx

I have another file called: Oxygen_1keV_600K.xlsx

and so on.

How can I loop through these files without having to re-code the whole thing? I then want to plot them all on the same graph. It would be nice to store the final matrix Y and Ymean for each file so they are not overwritten.

clear
clc


files = ['Oxygen_1keV_300K','Oxygen_1keV_300K','Oxygen_1keV_600K','Oxygen_1keV_900K'];
celldata = cellstr(file)

k = cell(1,24);
for k=1:24
   data{k} = xlsread('C:\Users\Ben\Desktop\Oxygen_1keV_300K.xlsx',['PKA', num2str(k)]);
end

for i=1:24
xfinal{i}=data{1,i}(end,1);
xi{i}=0:0.001:xfinal{i};
xi{i}=transpose(xi{i});

x{i}=data{1,i}(:,1);
y{i}=data{1,i}(:,4);
yi{i} = interp1(x{i},y{i},xi{i});
end

Y = zeros(10001, numel(data));
for ii = 1 : numel(data)
    Y(:, ii) = yi{ii}(1 : 10001);
end


Ymean = mean(Y, 2);

figure (1)
x=0:0.001:10;
semilogy(x,Ymean)

Upvotes: 0

Views: 225

Answers (1)

Cecilia
Cecilia

Reputation: 4721

Cell arrays make it very easy to store a list of strings that you can access as part of a for loop. In this case, I would suggest putting your file paths in a cell array as a substitute for the string used in your xlsread call

For example,

%The first file is the same as in your example.
%I just made up file names for the next two. 
%Use the full file path if the file is not in your current directory
filepath_list = {'C:\Users\Ben\Desktop\Oxygen_1keV_300K.xlsx', 'file2.xlsx', 'file3.xlsx'};

%To store separate results for each file, make Ymean a cell array or matrix too
YMean = zeros(length(filepath_list), 1);

%Now use a for loop to loop over the files
for ii=1:length(filepath_list)
   %Here's where your existing code would go 
   %I only include the sections which change due to the loop
   for k=1:24
      %The change is that on this line you use the cell array variable to load the next file path
      data{k} = xlsread(filepath_list{ii},['PKA', num2str(k)]);
   end
   % ... do the rest of your processing 
   %You'll need to index into Ymean to store your result in the corresponding location
   YMean(ii) = mean(Y, 2);
end

Cell arrays are a basic matlab variable type. For an introduction, I recommend the documentation for creating and accessing data in cell arrays.

If all your files are in the same directory, you can also use functions like dir or ls to populate the cell array programatically.

Upvotes: 1

Related Questions