用零填充数字Matlab的文件名(Matlab file name with zero-padded

2019-07-17 23:17发布

我有11×11的矩阵,我救了他们的.mat从文件F01_01F11_11 。 我要运行一个函数Func上的每个文件。 由于需要很长的时间,我想编写一个脚本来自动运行功能:

for i=01:11  
    for j=01:11  
        filename=['F',num2str(i), '_', num2str(j),'.mat'];  
        load(filename);  
        Func(Fi_j);   % run the function for each file  Fi_j  
    end  
end  

但是,这是行不通的,MATLAB找不到MAT文件。
可能有人请帮忙吗?

Answer 1:

问题

i=01; 
j=01; 
['F',num2str(i), '_', num2str(j),'.mat']

计算结果为

F1_1.mat

而不是

F01_01.mat

如预期。

这样做的原因是, i=01是一个double类型分配和i等于1 -有这些类型的变量没有前导零。

一个办法

针对该问题的可能的解决方案

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

几点意见:

  1. 注意用sprintf格式化双iijj使用前导零%02d

  2. 可以使用的第二个参数num2str格式化其输出,例如: num2str(ii,'%02d')

  3. 它是用一个很好的做法字符串格式化与字符串处理时的工具。

  4. 这是在MATLAB一个更好的做法使用ij循环计数器 ,因为在他们的MATLAB默认值是sqrt(-1)



Answer 2:

这里是一个替代的解决方案,请注意,由@解决夏嘉曦更容易扩展到多个数字,但这一要求的字符串格式化的了解较少。

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 


Answer 3:

num2str可以做zeropadding来填充字段。 在下面4中的示例是所期望的字段宽度+ 1。

num2str(1,'% 04.f')

年= 001



文章来源: Matlab file name with zero-padded numbers