Best Solution: non-scalar structure
Your code would be a lot simpler if you used a non-scalar structure rather than dynamically accessing fieldnames like that. Then your task would be trivial to solve:
>> str(1).xt = [0,1;2,3;4,5];
>> str(2).xt = [6,7;8,9;10,11];
>> str(3).xt = [12,13;14,15;16,17]
>> out = num2cell(cat(3,str.xt),2);
>> out = permute(out,[3,1,2]);
and checking the output:
>> out{2,3}
ans =
10 11
Complicated Solution: dynamic fieldnames
If you insist on making your code more complicated than it needs to be, then you could try doing this:
str.file_1.xt = [0,1;2,3;4,5];
str.file_2.xt = [6,7;8,9;10,11];
str.file_3.xt = [12,13;14,15;16,17];
out = struct2cell(str);
out = [out{:}];
out = num2cell(cat(3,out.xt),2);
out = num2cell(out,2);
out = permute(out,[3,1,2]);
Note that the first two lines convert your nested structures into one non-scalar structure, thus making this answer just like the first one except more complicated. You would be better off storing your data in a non-scalar structure to start with (or perhaps an even simpler data variable, e.g. an ND numeric array).