MATLAB Answers

Skipping files in a set

1 view (last 30 days)
MR0d on 27 Nov 2019
Commented: MR0d on 2 Dec 2019
I have 600 .vec files from a recent experiment and I need to remove/skip certain files from this group because they contain bad data. Say I need to remove files 132, 290, and 404. How would I do this? Here is the code I have for creating the matrices I need. Thank you.
rightfiles=dir('*.vec'); % Selects only the files in the directory ending with .vec. Generates a 600x1 struct.
for z=1:1:size(rightfiles)
f=importdata([rightfiles(z).name]);%Transitions data from .vec to .mat
%Sets x,y,u,v into matrices of only columns 1-4 from rightfiles, respectively,1);,2);,3);,4);
%Reshapes x,y,u,v into IxJ matrices
%Convert to the correct units
%Stack the vec files
MR0d on 2 Dec 2019
I have already gone through the data and selected the files with bad data.

Sign in to comment.

Answers (2)

Jan on 28 Nov 2019
Edited: Jan on 28 Nov 2019
What does "files 132, 290, and 404" mean? Are these the indices in rightfiles, or are these parts of the file name?
rightfiles([132, 290, 404]) = [];
for z = 1:numel(rightfiles)
f = importdata(rightfiles(z).name);
I've added some changes:
  • size(rightfield) replies a vector. 1:1:vector might reply something other than you expect. Although this works here for accident, it is safer to use numel instead.
  • 1:x looks nicer than 1:1:x
  • No need for square brackets around rightfiles(z).name. The [ and ] are the operator for concatenation. With one input only, there is nothing to concatenate.
Apply a pre-allocation before the loop. Letting arrays grow iteratively is extremely expensive.
  1 Comment
MR0d on 2 Dec 2019
The random numberes I selected were just examples. They are random indices of rightfiles that I would like to exclude. Thank you for the advice. And I do have lines for pre-allocation, just didn't think it was important for my question so I did not include them. Thank you very much.

Sign in to comment.

Image Analyst
Image Analyst on 28 Nov 2019
Make a function calls HasGoodData() that take in f and determines if the data is bad or not and returns true for good data and false for bad data. Then, in your loop...
for z = 1 : size(rightfiles)
f=importdata([rightfiles(z).name]); % Transitions data from .vec to .mat
if ~HasGoodData(f) % If not good data...
continue; % Skip this file by jumping to the very bottom of the loop but continuing with the next iteration.
% Run code for good data...
end % of for loop


Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!