MATLAB: Import data from txt file

data importtabletxt

Hi there,
my txt file looks like this: (see attached txt file)
What I try to get is a simple table with lines like this:
frame; timestamp [s]; loc_x; loc_y; loc_z
1007; 52045.728; -135.966; 225.786; -52.285
1008; 52045.745; -135.966; 225.786; -52.285
How can I do this? Thanks

Best Answer

This uses readtable() to read in your txt file and it uses regexp() with the 'tokens' flag to pull out relevant data.
%% Import data into table
opts = delimitedTextImportOptions("NumVariables", 1);
opts.DataLines = [1, Inf];
opts.VariableNames = "txt";
test1 = readtable("test1.txt", opts); %file is on path
%% Extract desired data
% Pull out the frame and ts data
tokens = regexp(test1.txt, 'frame (\d+) ts (\d+.\d+)', 'tokens');
frame_ts = cell2mat(cellfun(@str2double,[tokens{:}]','UniformOutput',false));
% Pull out loc coordinates
tokens = regexp(test1.txt, '^loc (-?\d+.\d+) (-?\d+.\d+) (-?\d+.\d+)', 'tokens');
loc = cell2mat(cellfun(@str2double,[tokens{:}]','UniformOutput',false));
% Check that frame_ts and loc have same number of rows.
if size(frame_ts,1) ~= size(loc,1)
error('''frame_ts'' and ''loc'' have different number of rows.')
end
%% Put data into table
T = array2table([frame_ts, loc], 'VariableNames', {'frame', 'timestamp', 'loc_x', 'loc_y', 'loc_z'});
% inspect first few rows
head(T)
Result
format long
>> head(T)
ans =
8×5 table
frame timestamp loc_x loc_y loc_z
_____ _________ ________ _______ _______
1007 52045.728 -135.966 225.786 -52.285
1008 52045.745 -135.966 225.786 -52.285
1009 52045.761 -135.967 225.786 -52.283
1010 52045.778 -135.967 225.786 -52.283
1011 52045.795 -135.967 225.786 -52.283
1012 52045.811 -135.967 225.786 -52.283
1013 52045.828 -135.967 225.786 -52.283
1014 52045.845 -135.967 225.786 -52.283