%  // clang-format off
function parsed = parseLog(filename)
%
% parsed = parseLog(filename)
% Parses a DataLog text file, with the filename specified in the string
% filename, into a struct with each column name as a field, and with the
% column data stored as a vector in that field.
%
% Arguments
%
% filename: A string with the name of the file to parse.
%
% Return value
%
% parsed: A struct containing each column parsed from the input file
%         as a field and with the column data stored as a vector in that 
%         field.
%

% Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
%
% Use of this source code is governed by a BSD-style license
% that can be found in the LICENSE file in the root of the source
% tree. An additional intellectual property rights grant can be found
% in the file PATENTS.  All contributing project authors may
% be found in the AUTHORS file in the root of the source tree.

table = importdata(filename, ',', 1);
if ~isstruct(table)
  error('Malformed file, possibly empty or lacking data entries')
end

colheaders = table.textdata;
if length(colheaders) == 1
  colheaders = regexp(table.textdata{1}, ',', 'split');
end

parsed = struct;
i = 1;
while i <= length(colheaders)
  % Checking for a multi-value column.
  m = regexp(colheaders{i}, '([\w\t]+)\[(\d+)\]', 'tokens');
  if ~isempty(m)
    % Parse a multi-value column
    n = str2double(m{1}{2}) - 1;
    parsed.(strrep(m{1}{1}, ' ', '_')) = table.data(:, i:i+n);
    i = i + n + 1;
  elseif ~isempty(colheaders{i})
    % Parse a single-value column
    parsed.(strrep(colheaders{i}, ' ', '_')) = table.data(:, i);
    i = i + 1;
  else
    error('Empty column');
  end
end
