循环创建新文件夹

时间:2014-07-09 15:53:02

标签: matlab

我有一个文件夹包含许多子文件夹,其名称为G #######(#是0-9之间的任何数字)。 我将所有子文件夹名称加载到名为main的单元格中。对于新文件夹,如果前一个文件夹以G开头,则它变为I并且它后面的######也会在它上方移动一个位置,即0-> 1 4-> 5 9-> 0所以,但我不知道我编码的位置,它会陷入循环中。

for i = 3:name_size_main
    str = main{i};
    size_str = size(str);
    j = 1;
    while j ~= size_str(2)
        if strcmpi(j,str(j))==1
            file_name(j)='I';
            j = j+1;
        elseif strcmpi(1,str(j))==1
            file_name(j)='2';
            j = j+1;
        elseif strcmpi(2,str(j))==1
            file_name(j)='3';
            j = j+1;
        elseif strcmpi(3,str(j))==1
            file_name(j)='4';
            j = j+1;
        elseif strcmpi(4,str(j))==1
            file_name(j)='5';
            j = j+1;
        elseif strcmpi(6,str(j))==1
            file_name(j)='7';
            j = j+1;
        elseif strcmpi(8,str(j))==1
            file_name(j)='9';
            j = j+1;
        elseif strcmpi(9,str(j))==1
            file_name(j)='0';
            j = j+1;
        elseif strcmpi(0,str(j))==1
            file_name(j)='1';
            j = j+1;
        end
    end
    mkdir(file_Paths_main,file_name);
end

1 个答案:

答案 0 :(得分:1)

我将分两部分回答您的问题 - 首先提出解决整体问题的简单方法,然后再检查循环问题。


解决您的问题

解决整体问题的一种简单方法就是这样:

str = 'G102019'
file_name = char(str + 1)
file_name(str=='9') = '0'

file_name =

H213120

要理解这一点,请注意每个字符都有一个相关的数字 - 例如资本' A'由数字65表示:

>> double('A')

ans =

    65

可以使用char来操纵此号码并将其转换回角色:

>> char(65+3)

ans =

D

还要注意表示字符的数字排序很好:

>> char(33:100)

ans =

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd

...所以原始字符串中的所有字符都可以被推送到一个字母中。只需在数字表示中加1即可。我需要一个黑客来处理9 - &gt; 0的情况,但除此之外一切都应该很好。


您的循环问题

循环的主要问题是,如果if语句都没有执行,j永远不会增加,所以始终满足while。将j=j+1移到if语句之外,以确保它总是递增。

没有满足if语句的原因是:

a)str中的第一个字符不是数字0-9,

中的任何一个

b)strcmpi需要两个字符串作为输入,但是你给出一个数字和一个字符串 - 即:

>> strcmpi(2, '2')

ans =

     0