Question

I have the following code:

for i=1:length(files)
    for j=1:length(files(i,1).day)
        if ((1:length(files(i,1).day(j).hour)) ~=  24)
            continue
        end
        for h = 1:24
            if ((1:length(files(i,1).day(j).hour(h).halfhour)) ~= 2)
                continue
            end

            if isempty(1:length(files(i,1).day(j).hour))
                continue
            end
            dayPSD = [];
            for h2=1:2
                dayPSD = [dayPSD; files(i,1).day(j).hour(h).halfhour(h2).data{8}'];
            end
        end
    end
end

where

  files=1x3 structure
  files(i,1).day=1x335 structure that contains 1 field hour which is a 1x24 structure
  files(i,1).day.hour=1x24 structure that contains 1 field halfhour which is a 1x2 structure

I am trying to loop through i and j, but when 1:length(files(i,1).day(j).hour) ~= 24 (so when the hours are less than 24) I would like to exit the loop and continue onto the next iteration of the for loop. I would also like it to exit the loop and continue onto the next iteration of the for loop if 1:length(files(i,1).day(j).hour(h).halfhour) ~= 2 (so when the half hours are less than 2) or if 1:length(files(i,1).day(j).hour is an empty cell (no data).

The current code I have written only seems to skip a loop index if 1:length(files(i,1).day(j).hour ~=24.

What am I doing wrong? Also how do I get it to continue onto the next iteration if any of those conditions are met? I've been banging my head on this for a while, and I know I'm probably making a simple mistake, but if anyone can point me in the right direction that would be great.

Thanks for your help in advance!

Was it helpful?

Solution

If I understand correctly, what you want is:

for i=1:length(files)
    for j=1:length(files(i,1).day)
        if ((1:length(files(i,1).day(j).hour)) ~=  24)
            continue
        end
        for h = 1:24
            if ((length(files(i,1).day(j).hour(h).halfhour)) ~= 2)
                break
            end

            if isempty(files(i,1).day(j).hour)
                break
            end
            dayPSD = [];
            for h2=1:2
                dayPSD = [dayPSD; files(i,1).day(j).hour(h).halfhour(h2).data{8}'];
            end
        end
    end
end

so when either condition is met, the flow of execution will exit the for h=.. loop, and as there is no other statement in the for j=1... loop, the code will in effect skip that iteration.

Also note that if ((1:length(files(i,1).day(j).hour(h).halfhour)) ~= 2) is comparing a vector (1:length(..)) to a scalar 2 which results in a vector of booleans. The if part will only be executed if all its elements are true which is most likely never the case.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top