% Jake Bobowski
% June 8, 2016
% Created using MATLAB R2014a.

% In this MATLAB script we attempt to develop a scheme to import and then
% process data from multiple files.

% Clear all variable assignments.
clearvars

% Before importing multiple files, we first have to learn about some of the
% properties of 'sprintf'.  sprint(%f, n) outputs the floating point number
% n.
sprintf('%f',3.21)

% If we put a number m in front of the f, it specifies that the number
% output should contain 24 characters.  In the example below, there's lots
% of white space in front of the output.
sprintf('%24f',3.21)

% We can force the white space to be filled with zeros by putting a 0
% (zero) in front of the number m.
sprintf('%024f',3.21)

% We can also specify the number of characters that should follow the
% decimal point using .p before the f where p is a postive integer.
sprintf('%024.6f',3.21)
sprintf('%024.6f',321)

% Suppose our files a labelled something like file001data.txt,
% file002data.txt, ...  We can use sprintf inside a loop to make the 001,
% 002, ...  We want out numbers to be m = 3 characters long and to have p =
% 0 characters after the decimal place.
sprintf('%03.0f',1)
sprintf('%03.0f',2)
sprintf('%03.0f',3)

% Inside a loop:
for k = 1:5
    sprintf('%03.0f',k)
end

% We can also put text within our sprintf command:
for k = 1:5
    sprintf('file%03.0fdata.txt',k)
end

% Finally we combine our sprintf command with dlmread to import multiple
% files.  In the example below I am assuming that the data files are all
% contained within the same folder as this MATLAB script (.m file).
for k = 1:5
    filename = sprintf('file%03.0fdata.txt', k);
    mydata{k} =  dlmread(filename);
end

% mydata{} is called a cell.  We access the first element using mydata{1}.
% This first element is a column vector.  We transpose it to a row vector
% using mydata{1}'
mydata
mydata{1}
first = mydata{1}'

% Maybe we only want every second file to be imported.  Only a slight
% change to the for loop control statement is required.
for k = 1:2:5
      filename = sprintf('file%03.0fdata.txt', k);
      myODDdata{k} =  dlmread(filename);
end
myODDdata
for k = 2:2:5
      filename = sprintf('file%03.0fdata.txt', k);
      myEVENdata{k} =  dlmread(filename);
end
myEVENdata

% If you want to select only specific files to be imported using
% non-sequential numbers, you can do the following.
importList = [1,2,3,4,5,8,12];
for k = 1:length(importList)
    filename = sprintf('file%03.0fdata.txt', importList(k));
    mydata{k} =  dlmread(filename);
end
mydata

% Now we can do calculations using the imported data.  For example, the
% element-by-element average of the 7 imported files is:
avg = zeros(1,length(mydata{1}));
for k = 1:length(mydata{1})
    tot = 0;
    for l = 1:length(mydata)
        tot = tot + mydata{l}(k);
    end
    avg(k) = tot/length(mydata);
end
avg

% Here's the average of each individual file:
avgB = zeros(1,length(mydata));
for k = 1:length(mydata)
    tot = 0;
    for l = 1:length(mydata{1})
        tot = tot + mydata{k}(l);
    end
    avgB(k) = tot/length(mydata{1});
end
avgB
ans =

3.210000


ans =

                3.210000


ans =

00000000000000003.210000


ans =

00000000000000003.210000


ans =

00000000000000321.000000


ans =

001


ans =

002


ans =

003


ans =

001


ans =

002


ans =

003


ans =

004


ans =

005


ans =

file001data.txt


ans =

file002data.txt


ans =

file003data.txt


ans =

file004data.txt


ans =

file005data.txt


mydata = 

  Columns 1 through 4

    [5x1 double]    [5x1 double]    [5x1 double]    [5x1 double]

  Column 5

    [5x1 double]


ans =

    1.0000
    1.1000
    1.2000
    1.3000
    1.4000


first =

    1.0000    1.1000    1.2000    1.3000    1.4000


myODDdata = 

    [5x1 double]    []    [5x1 double]    []    [5x1 double]


myEVENdata = 

    []    [5x1 double]    []    [5x1 double]


mydata = 

  Columns 1 through 4

    [5x1 double]    [5x1 double]    [5x1 double]    [5x1 double]

  Columns 5 through 7

    [5x1 double]    [5x1 double]    [5x1 double]


avg =

    5.0000    5.1000    5.2000    5.3000    5.4000


avgB =

    1.2000    2.2000    3.2000    4.2000    5.2000    8.2000   12.2000