MATLAB Answers

How to transfer folder structure to struct data?

43 views (last 30 days)
Eduard Mazur
Eduard Mazur on 30 May 2019
Commented: Eduard Mazur on 3 Jun 2019
I have big data inside some folder structure.
I need transfer almost whole(bold path) folder structure in my final struct file with data.
Question is: How to do it better than it is? I know I have 'dir' function but how to use it more smart in my case..
Structure like this:
C:\...\folders\release\mode\const\var\...\... .txt
folders=dir(path);
datas=struct;
s_fol=size(folders,1);
for ii=3:s_fol
cd(path);
if isfolder(folders(ii).name)
fol_now=folders(ii).name;
datas.(fol_now)=struct;
datas.(fol_now).Released=struct;
mode_folder=dir(strcat(path,{'\'},folders(ii).name,{'\Released'}));
s1_fol=size(mode_folder,1);
for ii1=3:s1_fol
cd(strcat(path,{'\'},folders(ii).name,{'\Released'}))
if isfolder(mode_folder(ii1).name)
mode_fol_now=mode_folder(ii1).name;
datas.(fol_now).Released.(mode_fol_now)=struct;
datas.(fol_now).Released.(mode_fol_now).dyn=struct;
var_fol=dir(strcat(path,{'\'},folders(ii).name,{'\Released\'},mode_fol_now,{'\dyn'}));
s2_fol=size(var_fol,1);
for ii2=3:s2_fol
cd(strcat(path,{'\'},folders(ii).name,{'\Released\'},mode_fol_now,{'\dyn'}))
if isfolder(var_fol(ii2).name)
var_fol_now=var_fol(ii2).name;
datas.(fol_now).Released.(mode_fol_now).dyn.(var_fol_now)=struct;
actual_name=strcat(path,{'\'},folders(ii).name,{'\Released\'},mode_fol_now,{'\dyn\'},var_fol_now);
cd(actual_name)
if exist('config.m', 'file') == 2
% PROCESSING DATA & STORE IN STRUCT
end
end
end
end
end
end
end

  5 Comments

Show 2 older comments
Jan
Jan on 31 May 2019
The question is not clear. For which .txt files are you looking? Does the existance of a config.m file is the specified folder matter?
Eduard Mazur
Eduard Mazur on 31 May 2019
It doesn't matter, processing .txt inside core program.
existance config.m in defined folder -- condition for run core program.
I just intresting in creating folder structure like in windows
Jan
Jan on 31 May 2019
I do not understand the 3 sentences of this comment.
What is a "core program" and which ".txt" files are processed by what?
How can this information be used: "existance config.m in defined folder -- condition for run core program"?
In which windows? A folder structure can be found in the file system. Are you sure that it is useful to copy this structure to a nested struct?

Sign in to comment.

Accepted Answer

Jan
Jan on 31 May 2019
It does not sound like a good design to use the folder names as field names. Keeping the names in a cell string might be smarter:
data(k).value = rand(10);
data(k).condition = {'folders', 'release', 'mode', 'const', 'var'};
Deeply nested structs are rarely useful for processing. But if you have a good reason to do so:
% Get all config.m files recursively (It is just a guess, that you need this):
BasePath = 'C:\Temp\';
FileList = dir(fullfile(BasePath, '**\config.m'));
data = struct([]);
for iFile = 1:numel(FileList)
Folder = FileList(iFile).path(numel(BasePath)+1:end);
Keys = strsplit(Folder, filesep);
data.(Keys{1}).(Keys{2}).(Keys{3}).(Keys{4}).(Keys{5}) = ???
end

  1 Comment

Eduard Mazur
Eduard Mazur on 3 Jun 2019
Thank you, this seems like the best solution.

Sign in to comment.

More Answers (0)

Products


Release

R2018b

Translated by