Matlab file name with zero-padded numbers
Solution 1:
The problem
i=01;
j=01;
['F',num2str(i), '_', num2str(j),'.mat']
evaluates to
F1_1.mat
and not to
F01_01.mat
as expected.
The reason for this is that i=01
is a double type assignment and i
equals to 1
- there are no leading zeros for these types of variables.
A solution
a possible solution for the problem would be
for ii = 1:11
for jj= 1:11
filename = sprintf('F_%02d_%02d.mat', ii, jj );
load(filename);
Func(Fi_j); % run the function for each file Fi_j
end
end
Several comments:
Note the use of
sprintf
to format the doubleii
andjj
with leading zero using%02d
.You can use the second argument of
num2str
to format its output, e.g.:num2str(ii,'%02d')
.It is a good practice to use string formatting tools when dealing with strings.
It is a better practice in matlab not to use
i
andj
as loop counters, since their default value in matlab issqrt(-1)
.
Solution 2:
Here is an alternate solution, note that the solution by @Shai is more easily expanded to multiple digits but this one requires less understanding of string formatting.
for i=1:11
for j=1:11
filename=['F',num2str(floor(i/10)),num2str(mod(i,10)) '_', num2str(floor(j/10)),num2str(mod(j,10)),'.mat'];
load(filename);
Func(Fi_j); % run the function for each file Fi_j
end
end
Solution 3:
The num2str
can do zeropadding to fill the field. In the example below 4 is the desired field width+1.
num2str(1,'% 04.f')
Ans = 001