MATLAB: Help with dynamic variable names set with ‘for’ incrementer

dynamic array labeling

Hi,
I am trying to split up a large numerical dataset into individual days. What I have that works and what I have that failed is;
function [FxStOut, FxStIndex] = FxSt(FxStIn)
%Struct for Forex
UnqDate = unique(FxStIn(:,1));
UnqL = length(UnqDate);
for ii = 1:UnqL
indx = FxStIn(:,1) == UnqDate(ii);
eval(['dataOut.d' num2str(ii) ' = FxStIn(indx, 2:6);']);
%Have tried but died
%dataOut(ii) = FxStIn(indx, 2:6);
%dataOut.d([ii]) = FxStIn(indx, 2:6);
%dataOut.([ii]) = FxStIn(indx, 2:6);
end
FxStOut = dataOut;
FxStIndex = UnqDate;
Is 'eval' the only way to achieve this, both reading in and out of array. A number/numeral can not be a variable/array name, as I would like;
data.1
data.2
data.3
is this correct.
Can I solve this by using a 3D (:,:,:), however, each depth is a different size (factors different) and I presume that is not allowed.

Best Answer

You are right in that using EVAL to dynamically generate variable names is generally a messy approach that's not very readable, slow, and doesn't scale well.
One alternative is using cell arrays.
Cell arrays let you store differently sized data, for example:
M{1} = [1 2 3]
M{2} = [1 2; 3 4]
M{3} = 'hello'
M{1} + 10
M{2} * 5
disp(M{3})