Using contains() with dir() to search files in folder

43 visualizaciones (últimos 30 días)
LabRat
LabRat el 29 de Jul. de 2022
Editada: Stephen23 el 30 de Jul. de 2022
%{
trying to figure out how to search a folder for a file that contains a
matching string
serials is a 1x26 cell
%}
files_in_folder = dir('folder');
TF = contains(files_in_folder.name, serials);
%{
Error using contains
Incorrect number of arguments. Each parameter name must be followed by
a corresponding value.
%}
TF = contains(files_in_folder.name, serials(1))
%{
Error using contains
Incorrect number of arguments. Each parameter name must be followed by a
corresponding value.
%}
for i = files_in_folder
if TF == 1
File = strcat('example.txt');
end
end
%{
trying a few different variations:
%}
for i = files_in_folder
if contains(files_in_folder, serials) == 1
disp(serials);
end
end
for i = files_in_folder.name
if contains(files_in_folder.name, serials) == 1
disp(short_serials);
end
end
%{
A dot '.' indexing expression produced a comma-separated list with 15
values where only a single value is allowed.
%}

Respuestas (1)

Stephen23
Stephen23 el 29 de Jul. de 2022
Editada: Stephen23 el 29 de Jul. de 2022
Replace this comma-separated list
files_in_folder.name
with this cell array of filenames:
{files_in_folder.name}
S = dir(..);
TF = contains({S.name}, serials);
  2 comentarios
LabRat
LabRat el 29 de Jul. de 2022
Thanks!
if I do something like this:
TF = contains({files_in_folder.name}, short_serials(2));
the result is:
1 0 0 0 0 0 0 0 0 0
Once I get an index with a value of 1, I want to load a file. In this example, {files_in_folder(1).name} = 1, so I want to load that file name in {files_in_folder(1).name}.
I tried a for loop but get the following error:
TF = contains(files_in_folder.name, app.SelectTestID.Value);
counter = 0;
for i = files_in_folder
counter = counter + 1;
if TF(counter) == 1
VideoFile = files_in_folder(counter).name;
end
end
Error using contains
Incorrect number of arguments. Each parameter name must be followed by
a corresponding value.
If I instead use:
TF = contains({files_in_folder.name}, app.SelectTestID.Value);
Then I get this error:
Unrecognized function or variable 'VideoFile'.
at the following line of code:
vidObj = VideoReader(VideoFile);
Stephen23
Stephen23 el 30 de Jul. de 2022
Editada: Stephen23 el 30 de Jul. de 2022
Rather than using a loop, you should simply use that index directly. For example:
TF = contains({files_in_folder.name}, app.SelectTestID.Value);
assert(nnz(TZ)==1,'Exactly one filename must match')
VideoFile = files_in_folder(TF).name;

Iniciar sesión para comentar.

Categorías

Más información sobre File Operations en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by