создать filedatastore файлов mat, фильтрующих файлы по шаблону имени файла в matlab - PullRequest
1 голос
/ 14 мая 2019

Можно ли создать файловое хранилище файлов матов, фильтрующих файлы по шаблону имени файла? Пока я получил это:

fds = fileDatastore(dir_save,'ReadFcn',@load,'FileExtensions','.mat','IncludeSubfolders',true);
f=1;
while hasdata(fds)
        disp(num2str(progress(fds)*100) 
        dataarray = read(fds);
        if ~isempty(strfind(fds.Files{f},myPattern))
            %% do somthing
        end
        f=f+1;
end

Но некоторые файлы матов, которые я не буду использовать, действительно большие и поэтому замедляют процесс. Я не могу переместить все файлы в 1 каталог, потому что моя структура каталогов выглядит так:

d01/file1.mat
d01/myPatternFile.mat
d01/othefile.mat
d02/file1.mat
d02/myPatternFile.mat
d02/othefile.mat
etc

1 Ответ

1 голос
/ 14 мая 2019

Вы можете использовать подстановочные знаки при вызове fullfile . Используя пример из документации fileDatastore :

% No filtering
>> fds = fileDatastore(fullfile(matlabroot,'toolbox','matlab','demos'),'ReadFcn',@load,'FileExtensions','.mat')
fds = 

  FileDatastore with properties:

                       Files: {
                              'E:\MATLAB64\R2018b\toolbox\matlab\demos\accidents.mat';
                              'E:\MATLAB64\R2018b\toolbox\matlab\demos\airfoil.mat';
                              'E:\MATLAB64\R2018b\toolbox\matlab\demos\airlineResults.mat'
                               ... and 37 more
                              }
                 UniformRead: 0
                     ReadFcn: @load
    AlternateFileSystemRoots: {}

% Filtering for .mat files starting with "w"
>> fds = 

fileDatastore(fullfile(matlabroot,'toolbox','matlab','demos','w*'),'ReadFcn',@load,'FileExtensions','.mat')
fds = 

  FileDatastore with properties:

                       Files: {
                              'E:\MATLAB64\R2018b\toolbox\matlab\demos\west0479.mat';
                              'E:\MATLAB64\R2018b\toolbox\matlab\demos\wind.mat'
                              }
                 UniformRead: 0
                     ReadFcn: @load
    AlternateFileSystemRoots: {}

Для проверки разных папок используйте два подстановочных знака:

>> !mkdir d01
>> !mkdir d02
>> !touch d01/file1.mat
>> !touch d01/myPatternFile.mat
>> !touch d02/file2.mat
>> !touch d02/myPatternFile.mat
>> fileDatastore(fullfile(pwd,'d*\myPattern*'),'ReadFcn',@load,'FileExtensions','.mat')
ans = 

  FileDatastore with properties:

                       Files: {
                              'H:\Documents\56133896\d01\myPatternFile.mat';
                              'H:\Documents\56133896\d02\myPatternFile.mat'
                              }
                 UniformRead: 0
                     ReadFcn: @load
    AlternateFileSystemRoots: {}
...