Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
您无需阅读所有这些代码,但我已将其发布以供参考。我需要将以下代码段从案例0-8更改为仅用于n。在个案之间唯一改变的是z的范围和变量名称(msgLength0,msgLength1,msgLength2等)。我尝试将变量msgLength#放入一个数组,但是没有“ count”变量就无法将其分配给正确的行。
如何摆脱这种“开关”并使用变量,而不是在个别情况下单独定义msgLength#? for these folders for these files countmsgLength0= 1; countmsgLength1= 1; countmsgLength2= 1; countmsgLength3= 1; countmsgLength4= 1; countmsgLength5= 1; countmsgLength6= 1; countmsgLength7= 1; countmsgLength8= 1; for x= 1:length(firstinSeq) for y= 1:length(littledataPassed) if firstinSeq(x,1)== littledataPassed(y,1) && firstinSeq(x,2)== littledataPassed(y,2) switch firstinSeq(x,3) case 0 indexStop = find(firstinSeq(x,4) ~= littledataPassed(y:length(littledataPassed),4), 1, 'first'); indexProcess = find((littledataPassed(y:y+indexStop-1,6) == 1 & ... littledataPassed(y:y+indexStop-1,2) == firstinSeq(x,2) & ... littledataPassed(y:y+indexStop-1,5) == 0),1,'first'); if isempty(indexProcess) msgLength0(countmsgLength0,:)= [firstinSeq(x,:) [0 0 0 0 0 0]]; else msgLength0(countmsgLength0,:)= [firstinSeq(x,:) littledataPassed(y+indexProcess-1,:)]; end countmsgLength0= countmsgLength0 + 1; case 1 indexStop = find(firstinSeq(x,4) ~= littledataPassed(y:length(littledataPassed),4), 1, 'first'); indexProcess = find((littledataPassed(y:y+indexStop-1,6) == 1 & ... littledataPassed(y:y+indexStop-1,2) == firstinSeq(x,2) & ... littledataPassed(y:y+indexStop-1,5) == 0), 1, 'first'); if isempty(indexProcess) msgLength1(countmsgLength1,:)= [firstinSeq(x,:) [0 0 0 0 0 0]]; else msgLength1(countmsgLength1,:)= [firstinSeq(x,:) littledataPassed(y+indexProcess-1,:)]; end countmsgLength1= countmsgLength1 + 1; case 2 indexStop = find(firstinSeq(x,4) ~= littledataPassed(y:length(littledataPassed),4), 1, 'first'); for z= 0:1 indexProcess = find((littledataPassed(y:y+indexStop-1,6) == 1 & ... littledataPassed(y:y+indexStop-1,2) == firstinSeq(x,2) & ... littledataPassed(y:y+indexStop-1,5) == z), 1, 'first'); if isempty(indexProcess) msgLength2(countmsgLength2,:)= [firstinSeq(x,:) [0 0 0 0 0 0]]; else msgLength2(countmsgLength2,:)= [firstinSeq(x,:) littledataPassed(y+indexProcess-1,:)]; end countmsgLength2= countmsgLength2 + 1; end case 3 indexStop = find(firstinSeq(x,4) ~= littledataPassed(y:length(littledataPassed),4), 1, 'first'); for z= 0:2 indexProcess = find((littledataPassed(y:y+indexStop-1,6) == 1 & ... littledataPassed(y:y+indexStop-1,2) == firstinSeq(x,2) & ... littledataPassed(y:y+indexStop-1,5) == z), 1, 'first'); if isempty(indexProcess) msgLength3(countmsgLength3,:)= [firstinSeq(x,:) [0 0 0 0 0 0]]; else msgLength3(countmsgLength3,:)= [firstinSeq(x,:) littledataPassed(y+indexProcess-1,:)]; end countmsgLength3= countmsgLength3 + 1; end case 4 indexStop = find(firstinSeq(x,4) ~= littledataPassed(y:length(littledataPassed),4), 1, 'first'); for z=0:3 indexProcess = find((littledataPassed(y:y+indexStop-1,6) == 1 & ... littledataPassed(y:y+indexStop-1,2) == firstinSeq(x,2) & ... littledataPassed(y:y+indexStop-1,5) == z), 1, 'first'); if isempty(indexProcess) msgLength4(countmsgLength4,:)= [firstinSeq(x,:) [0 0 0 0 0 0]]; else msgLength4(countmsgLength4,:)= [firstinSeq(x,:) littledataPassed(y+indexProcess-1,:)]; end countmsgLength4= countmsgLength4 + 1; end case 5 indexStop = find(firstinSeq(x,4) ~= littledataPassed(y:length(littledataPassed),4), 1, 'first'); for z= 0:4 indexProcess = find((littledataPassed(y:y+indexStop-1,6) == 1 & ... littledataPassed(y:y+indexStop-1,2) == firstinSeq(x,2) & ... littledataPassed(y:y+indexStop-1,5) == z), 1, 'first'); if isempty(indexProcess) msgLength5(countmsgLength5,:)= [firstinSeq(x,:) [0 0 0 0 0 0]]; else msgLength5(countmsgLength5,:)= [firstinSeq(x,:) littledataPassed(y+indexProcess-1,:)]; end countmsgLength5= countmsgLength5 + 1; end case 6 indexStop = find(firstinSeq(x,4) ~= littledataPassed(y:length(littledataPassed),4), 1, 'first'); for z= 0:5 indexProcess = find((littledataPassed(y:y+indexStop-1,6) == 1 & ... littledataPassed(y:y+indexStop-1,2) == firstinSeq(x,2) & ... littledataPassed(y:y+indexStop-1,5) == z), 1, 'first'); if isempty(indexProcess) msgLength6(countmsgLength6,:)= [firstinSeq(x,:) [0 0 0 0 0 0]]; else msgLength6(countmsgLength6,:)= [firstinSeq(x,:) littledataPassed(y+indexProcess-1,:)]; end countmsgLength6= countmsgLength6 + 1; end case 7 indexStop = find(firstinSeq(x,4) ~= littledataPassed(y:length(littledataPassed),4), 1, 'first'); for z=0:6 indexProcess = find((littledataPassed(y:y+indexStop-1,6) == 1 & ... littledataPassed(y:y+indexStop-1,2) == firstinSeq(x,2) & ... littledataPassed(y:y+indexStop-1,5) == z), 1, 'first'); if isempty(indexProcess) msgLength7(countmsgLength7,:)= [firstinSeq(x,:) [0 0 0 0 0 0]]; else msgLength7(countmsgLength7,:)= [firstinSeq(x,:) littledataPassed(y+indexProcess-1,:)]; end countmsgLength7= countmsgLength7 + 1; end case 8 indexStop = find(firstinSeq(x,4) ~= littledataPassed(y:length(littledataPassed),4), 1, 'first'); for z=0:7 indexProcess = find((littledataPassed(y:y+indexStop-1,6) == 1 & ... littledataPassed(y:y+indexStop-1,2) == firstinSeq(x,2) & ... littledataPassed(y:y+indexStop-1,5) == z), 1, 'first'); if isempty(indexProcess) msgLength8(countmsgLength8,:)= [firstinSeq(x,:) [0 0 0 0 0 0]]; else msgLength8(countmsgLength8,:)= [firstinSeq(x,:) littledataPassed(y+indexProcess-1,:)]; end countmsgLength8= countmsgLength8+ 1; end end break end end end msgLength0((countmsgLength0):100,:)= []; msgLength1((countmsgLength1):1000,:)= []; msgLength2((countmsgLength2):1000,:)= []; msgLength3((countmsgLength3):1500,:)= []; msgLength4((countmsgLength4):1000,:)= []; msgLength5((countmsgLength5):1000,:)= []; msgLength6((countmsgLength6):500,:)= []; msgLength7((countmsgLength7):300,:)= []; msgLength8((countmsgLength8):300,:)= []; allmsgLength0(countallmsgLength0:(countallmsgLength0+length(msgLength0(:,1))-1),:) = msgLength0; allmsgLength1(countallmsgLength1:(countallmsgLength1+length(msgLength1(:,1))-1),:) = msgLength1; allmsgLength2(countallmsgLength2:(countallmsgLength2+length(msgLength2(:,1))-1),:) = msgLength2; allmsgLength3(countallmsgLength3:(countallmsgLength3+length(msgLength3(:,1))-1),:) = msgLength3; allmsgLength4(countallmsgLength4:(countallmsgLength4+length(msgLength4(:,1))-1),:) = msgLength4; allmsgLength5(countallmsgLength5:(countallmsgLength5+length(msgLength5(:,1))-1),:) = msgLength5; allmsgLength6(countallmsgLength6:(countallmsgLength6+length(msgLength6(:,1))-1),:) = msgLength6; allmsgLength7(countallmsgLength7:(countallmsgLength7+length(msgLength7(:,1))-1),:) = msgLength7; allmsgLength8(countallmsgLength8:(countallmsgLength8+length(msgLength8(:,1))-1),:) = msgLength8; countallmsgLength0 = countallmsgLength0 + length(msgLength0(:,1)); countallmsgLength1 = countallmsgLength1 + length(msgLength1(:,1)); countallmsgLength2 = countallmsgLength2 + length(msgLength2(:,1)); countallmsgLength3 = countallmsgLength3 + length(msgLength3(:,1)); countallmsgLength4 = countallmsgLength4 + length(msgLength4(:,1)); countallmsgLength5 = countallmsgLength5 + length(msgLength5(:,1)); countallmsgLength6 = countallmsgLength6 + length(msgLength6(:,1)); countallmsgLength7 = countallmsgLength7 + length(msgLength7(:,1)); countallmsgLength8 = countallmsgLength8 + length(msgLength8(:,1)); end cd .. end 回答: 这是摆脱开关/外壳的一种方法。但是,如果您进一步解释数据的外观和想要实现的功能,则可能对您更有用。最有可能的是,整个分析可以大大简化。 countmsgLength = ones(9,1); %# countmsgLength(1) are the counts for to case 0 msgLength = cell(9,1); for x= 1:length(firstinSeq) for y= 1:length(littledataPassed) if firstinSeq(x,1)== littledataPassed(y,1) && firstinSeq(x,2)== littledataPassed(y,2) switchNum = firstinSeq(x,3); %# switchNum is 0...8 indexStop = find(firstinSeq(x,4) ~= littledataPassed(y:length(littledataPassed),4), 1, 'first'); for z= 0:switchNum-1 %# if switchNum |
![]() |
![]() |