2014-07-09 116 views
0

我有一个文件夹包含许多名称为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

我要回答你的问题分为两个部分 - 通过提出解决你的整体问题的一个简单的方法,然后再下一个检查你的循环问题。


解决您的问题

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

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 

而且也注意到,代表字符的数字都在一个不错的order:

>> char(33:100) 

ans = 

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

...因此,您原始字符串中的所有字符都可以通过在其数字表示中加1来“推起来”。我需要一个破解来处理9 - >0的情况,但除此之外一切都会好的。


你的循环问题

与循环的主要问题是,如果没有if报表的不断执行,j没有被增加,因此while始终满足。在if语句之外移动j=j+1以确保它始终递增。

没有if陈述得到满足的原因是:

一)在str的第一个字符是没有任何数字0-9中,

B)strcmpi要求两个字符串作为输入,但你给一个数字和一个字符串 - 即:

>> strcmpi(2, '2') 

ans = 

    0 
+0

谢谢,第一种方法实际上帮助编辑了很多 我对9-> 0所做的只是使用for循环来检查并切换它,但很高兴知道第一个循环出了什么问题 – user2683631