1*d9f75844SAndroid Build Coastguard Workerfunction parsed = parseLog(filename) 2*d9f75844SAndroid Build Coastguard Worker% 3*d9f75844SAndroid Build Coastguard Worker% parsed = parseLog(filename) 4*d9f75844SAndroid Build Coastguard Worker% Parses a DataLog text file, with the filename specified in the string 5*d9f75844SAndroid Build Coastguard Worker% filename, into a struct with each column name as a field, and with the 6*d9f75844SAndroid Build Coastguard Worker% column data stored as a vector in that field. 7*d9f75844SAndroid Build Coastguard Worker% 8*d9f75844SAndroid Build Coastguard Worker% Arguments 9*d9f75844SAndroid Build Coastguard Worker% 10*d9f75844SAndroid Build Coastguard Worker% filename: A string with the name of the file to parse. 11*d9f75844SAndroid Build Coastguard Worker% 12*d9f75844SAndroid Build Coastguard Worker% Return value 13*d9f75844SAndroid Build Coastguard Worker% 14*d9f75844SAndroid Build Coastguard Worker% parsed: A struct containing each column parsed from the input file 15*d9f75844SAndroid Build Coastguard Worker% as a field and with the column data stored as a vector in that 16*d9f75844SAndroid Build Coastguard Worker% field. 17*d9f75844SAndroid Build Coastguard Worker% 18*d9f75844SAndroid Build Coastguard Worker 19*d9f75844SAndroid Build Coastguard Worker% Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 20*d9f75844SAndroid Build Coastguard Worker% 21*d9f75844SAndroid Build Coastguard Worker% Use of this source code is governed by a BSD-style license 22*d9f75844SAndroid Build Coastguard Worker% that can be found in the LICENSE file in the root of the source 23*d9f75844SAndroid Build Coastguard Worker% tree. An additional intellectual property rights grant can be found 24*d9f75844SAndroid Build Coastguard Worker% in the file PATENTS. All contributing project authors may 25*d9f75844SAndroid Build Coastguard Worker% be found in the AUTHORS file in the root of the source tree. 26*d9f75844SAndroid Build Coastguard Worker 27*d9f75844SAndroid Build Coastguard Workertable = importdata(filename, ',', 1); 28*d9f75844SAndroid Build Coastguard Workerif ~isstruct(table) 29*d9f75844SAndroid Build Coastguard Worker error('Malformed file, possibly empty or lacking data entries') 30*d9f75844SAndroid Build Coastguard Workerend 31*d9f75844SAndroid Build Coastguard Worker 32*d9f75844SAndroid Build Coastguard Workercolheaders = table.textdata; 33*d9f75844SAndroid Build Coastguard Workerif length(colheaders) == 1 34*d9f75844SAndroid Build Coastguard Worker colheaders = regexp(table.textdata{1}, ',', 'split'); 35*d9f75844SAndroid Build Coastguard Workerend 36*d9f75844SAndroid Build Coastguard Worker 37*d9f75844SAndroid Build Coastguard Workerparsed = struct; 38*d9f75844SAndroid Build Coastguard Workeri = 1; 39*d9f75844SAndroid Build Coastguard Workerwhile i <= length(colheaders) 40*d9f75844SAndroid Build Coastguard Worker % Checking for a multi-value column. 41*d9f75844SAndroid Build Coastguard Worker m = regexp(colheaders{i}, '([\w\t]+)\[(\d+)\]', 'tokens'); 42*d9f75844SAndroid Build Coastguard Worker if ~isempty(m) 43*d9f75844SAndroid Build Coastguard Worker % Parse a multi-value column 44*d9f75844SAndroid Build Coastguard Worker n = str2double(m{1}{2}) - 1; 45*d9f75844SAndroid Build Coastguard Worker parsed.(strrep(m{1}{1}, ' ', '_')) = table.data(:, i:i+n); 46*d9f75844SAndroid Build Coastguard Worker i = i + n + 1; 47*d9f75844SAndroid Build Coastguard Worker elseif ~isempty(colheaders{i}) 48*d9f75844SAndroid Build Coastguard Worker % Parse a single-value column 49*d9f75844SAndroid Build Coastguard Worker parsed.(strrep(colheaders{i}, ' ', '_')) = table.data(:, i); 50*d9f75844SAndroid Build Coastguard Worker i = i + 1; 51*d9f75844SAndroid Build Coastguard Worker else 52*d9f75844SAndroid Build Coastguard Worker error('Empty column'); 53*d9f75844SAndroid Build Coastguard Worker end 54*d9f75844SAndroid Build Coastguard Workerend 55