Hi
I have a script and I want to rut it for a folder. I should say that the folder has subfolders. The folder structure is like below:
'rocording\myproject\020320 (it is a date)\XYdata'
the first two folders are same but I have many folders for third subfolder (different dates) and one 'XYdata' folder inside each date folder.
I want to run my script for the text files inside the XYdata subfolders.

 채택된 답변

Benjamin Großmann
Benjamin Großmann 2020년 3월 9일

1 개 추천

You can use the asterisk (*) as wildcard to generate a file pattern and the dir command to get a struct of all the matching files. Assuming we are in the directory where the rocording folder is located and your data are mat-files:
file_pattern = './rocording/myproject/*/xydata/*.mat';
data_dir = dir(file_pattern);
data_locations = fullfile({data_dir.folder}, {data_dir.name})
Then you can use fullfile to obtain a cell array of file locations. Now you can loop over this cell or use cellfun to do stuff with all the data.

추가 답변 (1개)

Adam Danz
Adam Danz 2020년 3월 9일

1 개 추천

Try this out,
mainDir = 'C:\Users\name\Documents\MATLAB\rocording\myproject'; % <-- replace with your real path
% Get a list of content
content = dir(mainDir);
% Remove content that isn't a subdirectory
subDirs = {content.name}';
content(~[content.isdir]' | startsWith(subDirs, '.')) = [];
% Loop through each subdirectory
for i = 1:numel(content)
% Create full path to the XYdata directory
fullpath = fullfile(content(i).folder, content(i).name, 'XYdata');
% Test that it exists
assert(exist(fullpath,'dir')==7, ['Directory doesn''t exist: ', fullpath])
% Use fullpath for your script.
% To add filename, file = fullfile(fullpath, 'myFile.mat');
end

댓글 수: 5

Benjamin Großmann
Benjamin Großmann 2020년 3월 9일
This is way more complex than it has to be. See my answer for the proper use of the asterisk as wildcard.
Boby S
Boby S 2020년 3월 9일
Thanks Adma, I got an error because 'XYdata' subfolder is second; before that I have the date subfolder ( XYdata).
The code runs but it say it could not find XYdata. (because XYdata is inside date subfolder).
Adam Danz
Adam Danz 2020년 3월 9일
@Boby S, What is the value of fullpath when you get the error?
@Benni, I do like your suggestion to use wildcards, it's robust, but I think you're overestimating the difference in complexity from my answer.
Boby S
Boby S 2020년 3월 9일
....\Ha\XYdata
The 'HA' subfolder exists but I do not have 'XYdata' in this folder.
Adam Danz
Adam Danz 2020년 3월 9일
Ah, if the subfolder structure isn't consistent then the wildcard method is the way to go.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 File Operations에 대해 자세히 알아보기

질문:

2020년 3월 9일

댓글:

2020년 3월 9일

Community Treasure Hunt

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

Start Hunting!

Translated by