2014-07-09 156 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