title: MATLAB function to import data from text files and calculate averages
body: <p>I've written the following function which imports .txt files into <a href="http://en.wikipedia.org/wiki/MATLAB" rel="nofollow">MATLAB</a>. The .txt files can either be recorded at hourly intervals or 4 minute intervals where, depending on the initial resolution, the script will calculate the hourly or daily averages.</p>
  
  <pre><code>function [Daily, Hourly] = calc_avg(pathName)
      TopFolder = pathName;
      dirListing = dir(fullfile(TopFolder,'*.txt'));%#Lists the folders in the directory
                                                    %#specified by pathName.
      for i = 1:length(dirListing);
          fileToRead1{i} = (dirListing(i).name);
          %#lists all of the .txt files in the TopFolder
      end
      cell_all = arrayfun(@(i1)importdata(fullfile(pathName,dirListing(i1).name)),...
          (1:length(dirListing))','un',0); %#'
  
      %# Apply function to each element of the array.
      d = cat(2,cell_all{:});
  
      %# Concatenate arrays along each column (i.e. 2).
      %# Find the length of the dataset, which will provide information on the
      %# amount of averaging required.
      if length(d) == 365,...
              error('error: daily averages already calculated'); %#'
      elseif length(d) == 8760;
          daily = squeeze(mean(reshape(d,24,size(d,1)/24,[])));
      elseif length(d) == 131400;
          hourly = squeeze(mean(reshape(d,15,size(d,1)/15,[])));
          daily = squeeze(mean(reshape(d,360,size(d,1)/360,[])));
      end
  
      %# Find which averages have been calculated:
      A = exist('hourly','var');
  
      %# If A == 1 means that hourly values had to be calculated therefore
      %# the data if of high resolution (minutes).
      if A == 1;
          hourly = mat2cell(hourly,size(hourly,1),cellfun('size',cell_all,2)).'; %#'
          daily = mat2cell(daily,size(daily,1),cellfun('size',cell_all,2)).'; %#'
      elseif A == 0;
          daily = mat2cell(daily,size(daily,1),cellfun('size',cell_all,2)).';%#'
      end
  
      %# Create cell in the same format as 'cell_all' where cellfun applies the
      %# same function to each cell in a cell array. 'size' is used to create
      %# the same format.
      for i=1:length(dirListing);
          [~,name{i}] = fileparts(fileToRead1{i});
          %# Obtain the name of each of the .txt files (dirListing)
      end
  
      %#Generate a structure for the averages calculated.
      if A == 1;
          for i=1:length(dirListing);
              Daily.(genvarname(name{i})) = daily{i};
              Hourly.(genvarname(name{i})) = hourly{i};
          end
      elseif A == 0;
          for i=1:length(dirListing);
              Daily.(genvarname(name{i})) = daily{i};
          end
  end
  </code></pre>
  
  <p>The script works fine if I simply run it as a script i.e. avoid using the function and just type the path Name into the second line. But once I try and use if as a function it fails to work. It generates an error:</p>
  
  <pre><code>Error in calc_avg (line 15)
  TopFolder = pathName;
  </code></pre>
  
  <p>What am I doing wrong? Does the problem arise because <code>pathName</code> is a string?</p>