| 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 |