MATLAB Answers

Create subfolders in the desired way

1 view (last 30 days)
Hi community! I would appreciate your contribution to the following.
I have created the directory I want (the first of which is C:\Users\dparliari\Desktop\OutputEv\Airport\Temperature) using the following lines:
output_path='C:\Users\dparliari\Desktop\OutputEv'
vars={'Temperature'; 'Relative humidity'};
for m=1:size(vars,1)
if(~exist([output_path,'\',namestr,'\',strrep(vars{m},' ','_'),'\'],'dir'))
mkdir([output_path,'\',namestr,'\',strrep(vars{m},' ','_'),'\'],'dir')
end
end
Now I want to create a subfolder based on the year in this way: C:\Users\dparliari\Desktop\OutputEv\Airport\Temperature\2015
I guess it must be something like:
output_path='C:\Users\dparliari\Desktop\OutputEv'
vars={'Temperature'; 'Relative humidity'};
years = {'2015'; '2019'};
for m=1:size(vars,1)
if(~exist([output_path,'\',namestr,'\',strrep(vars{m},' ','_'),'\'],'dir'))
mkdir([output_path,'\',namestr,'\',strrep(vars{m},' ','_'),'\'],'dir')
for k = 1:size(years,1)
if(~exist([I HAVE NO IDEA!!))
mkdir([ALSO NO IDEA!!)
end
end
end
Any ideas please??

  2 Comments

Daphne PARLIARI
Daphne PARLIARI on 14 Jan 2020
Sorry I didn't get it. Can you please explain a bit further?

Sign in to comment.

Accepted Answer

Guillaume
Guillaume on 14 Jan 2020
Edited: Guillaume on 14 Jan 2020
As Per isakson said, use fullfile instead of building paths manually. fullfile automatically inserts the correct path separator for whichever OS your code is running on.
I would do it like this
output_path='C:\Users\dparliari\Desktop\OutputEv';
vars={'Temperature'; 'Relative humidity'};
years = {'2015'; '2019'};
[vv, yy] = ndgrid(vars, years); %note that this syntax is not officially supported. If it's a problem use
%[vv, yy] = ndgrid(1:numel(vars), 1:numel(years)); vv = vars(vv); yy = years(yy);
allfolders = fullfile(output_path, 'Airport', vv, yy);
for fidx = 1:numel(allfolders)
if ~exist(allfolders{fidx}, 'dir')
mkdir(allfolders{fidx});
end
end

  3 Comments

Daphne PARLIARI
Daphne PARLIARI on 14 Jan 2020
Thank you Guillaume, it worked with [vv, yy] = ndgrid(1:numel(vars),1:numel(years)); vv = vars(vv); yy = years(yy);.
Going one step deeper into creating correct subfolders, I have many stations that must be placed into the respective folders that I'll create.
Eg., C:\Users\dparliari\Desktop\OutputTry\Airport\Relative humidity\2015
must contain all plots about Relative Humidity concerning the station Airport for 2015.
I am attaching the code I have written so far, in order to understand the way I worked. I already placed your lines of code but I have trouble in putting the stations' names one step before the variables (I am talking about subfolders, of course). I already messed up once....
Thank you again!
Guillaume
Guillaume on 14 Jan 2020
First, you need to learn to use tables properly.
stations(x, y)
uses () indexing and thus returns a table (the portion of the table referenced by indices x, y.
stations{x, y}
uses {} indexing and thus returns the content of the table.
Another way to get the content is with . indexing:
stations.y(x)
So, instead of:
network = stations (i, 'Network');
% ...
networkstr = char(network.(1));
simply:
networkstr = char(stations{i, 'Network'});
or
networkstr = char(stations.Network(i)); %probably simpler
I'm not convinced the char() conversion is even needed.
So I can understand better what your code is doing, can you attach an example input table?
Daphne PARLIARI
Daphne PARLIARI on 14 Jan 2020
I am attaching the list of stations and an example of data (excel file).
Plus you are correct, line
networkstr = char(network.(1));
works exactly as
networkstr = char(stations{i, 'Network'});

Sign in to comment.

More Answers (1)

per isakson
per isakson on 14 Jan 2020
Edited: per isakson on 14 Jan 2020
Try this
%%
output_path = 'd:\m\cssm'; % 'C:\Users\dparliari\Desktop\OutputEv'
vars = {'Temperature', 'Relative_humidity'};
years = {'2015', '2019'};
for vv = vars
for yy = years
ffs = fullfile( output_path, 'Airport', vv{:}, yy{:} );
mkdir( ffs );
end
end

  1 Comment

per isakson
per isakson on 14 Jan 2020
Should be 'Airport' not Airport

Sign in to comment.

Sign in to answer this question.