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