How to simplify code which reads multiple files

1 visualizzazione (ultimi 30 giorni)
Hello,
I have a script which runs through multiple csv files based on a query:
filePattern = fullfile(myFolder, '*ABC*.csv');
theFiles = dir(filePattern);
for k = 1 : length(theFiles)
baseFileName = theFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
%Rest of my code goes here
end
However, I also want it to run through files labelled 'DEF' and also run the same chunk of code that comes after the following line.
fullFileName = fullfile(myFolder, baseFileName);
I wasn' t sure how to simply this so I ended up just copying and pasting the entire code while just changing the first line to another query:
i.e.
filePattern = fullfile(myFolder, '*DEF*.csv');
This definitely isn't efficient by any means so I was hoping to get some insight in any way possible to reduce the clutter.

Risposta accettata

Stephen23
Stephen23 il 10 Gen 2020
Modificato: Stephen23 il 10 Gen 2020
You don't need to repeat the entire code, just the dir call is enough:
theFiles = [...
dir(fullfile(myFolder, '*ABC*.csv'));...
dir(fullfile(myFolder, '*DEF*.csv'))];
  1 Commento
Nom
Nom il 10 Gen 2020
Thank you for your answer, this worked!
I switched over to this method because of its simplicity.

Accedi per commentare.

Più risposte (1)

Adam Danz
Adam Danz il 10 Gen 2020
You can initially list all files with a given extension and then eliminate any files that do not contain one of the strings listed. This solution uses contains(), released in r2016b.
% Get all files with given extension
filePattern = fullfile(myFolder, '*.csv');
theFiles = dir(filePattern);
% Isolate files with a matching pattern
filenameOptions = {'ABC','DEF'};
matchIdx = contains({theFiles.name},filenameOptions);
theFiles(~matchIdx) = []; % Eliminate all non-matched files

Categorie

Scopri di più su Data Import from MATLAB in Help Center e File Exchange

Prodotti


Release

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by