Load and do operations for multiple files in a loop
2 views (last 30 days)
Show older comments
Hi everyone,
I have 306 files (1x1 struct with 2 fields: x and y) in the following format: ATA 1....306.mat. These represent coordinates from a digitized signal.
I want to read the files in MATLAB and do similar operations on all of them. The code I want to write in a loop is:
%convertstructure to table
data = struct2table(data)
%convert table to timetable
data.x= seconds (data.x)
data = table2timetable(data, 'RowTimes', x)
% resolve potentially duplicate times in preparation for next step
data= unique(data,'sort','rows')
%resample data (using nearest neighbour) in timetable to resolve issue of irregular times. d predefines a time step.
d= seconds(0.0001)
data = retime(data,'regular','nearest','TimeStep',d)
save ('data')
I have made a few different unsuccesful attempts. One of them being:
filePattern = fullfile('ATA*.mat'); %the 306 files are in the following format ATA 1....306.mat
theFiles = dir(filePattern);
for k= 1:306(theFiles);
data = load(theFiles.name);
data = struct2table(data);
data.x= seconds (data.x);
data = table2timetable(data, 'RowTimes', x);
data= unique(data,'sort','rows');
d= seconds(0.0001);
data = retime(data,'regular','nearest','TimeStep',d);
% then save as original file name
end
Your help would be much appreciated!
Regards,
Pasha
0 Comments
Accepted Answer
Ameer Hamza
on 23 Jun 2020
Try something like this
filePattern = fullfile('ATA*.mat'); %the 306 files are in the following format ATA 1....306.mat
theFiles = dir(filePattern);
for k= 1:numel(theFiles)
data = load(theFiles(k).name);
data = struct2table(data);
data.x= seconds (data.x);
data = table2timetable(data, 'RowTimes', x);
data= unique(data,'sort','rows');
d= seconds(0.0001);
data = retime(data,'regular','nearest','TimeStep',d);
% then save as original file name
save(theFiles(k).name);
end
8 Comments
Ameer Hamza
on 25 Jun 2020
Try this
filePattern = fullfile('ATA*.mat'); %the 306 files are in the following format ATA 1....306.mat
theFiles = dir(filePattern);
for k= 1:numel(theFiles)
data = load(theFiles(k).name);
data = struct2table(data.(theFiles(k).name(1:end-4)));
data.x= seconds (data.x);
data = table2timetable(data, 'RowTimes', x);
data= unique(data,'sort','rows');
d= seconds(0.0001);
data = retime(data,'regular','nearest','TimeStep',d);
% then save as original file name
save(theFiles(k).name);
end
More Answers (0)
See Also
Categories
Find more on Sources in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!