我想知道这是否可行。我的代码如下所示:
indexStop = find(firstinSeq(x,4) ~= ...
littledataPassed(y:length(littledataPassed),4), 1, 'first');
for z= 0:(n-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)
msgLength[n](countmsgLength[n],:)= [firstinSeq(x,:) [0 0 0 0 0 0]];
else
msgLength[n](countmsgLength[n],:)= [firstinSeq(x,:) ...
littledataPassed(y+indexProcess-1,:)];
end
countmsgLength[n]= countmsgLength[n] + 1;
end
我希望将所有读取[n]
的内容切换为n
的实际值,这样我就可以使用它将数据添加到msgLength#
格式的九个不同变量中。我尝试过搜索教程,但没有看到任何关于这个主题的内容。
答案 0 :(得分:8)
使用数组或cell arrays来存储数据几乎总是比创建一堆名为a1
,a2
,a3
等的变量更好。例如,您可以将msgLength
初始化为包含n
元素的单元格数组:
msgLength = cell(1,n);
您可以使用花括号访问msgLength
的单元格:
msgLength{n} = ... %# Assign something to cell n
您的变量countmsgLength
只能是常规数字数组,因为它似乎只存储n
个值。您只需将方括号更改为括号(即[n]
至(n)
)。
但是,如果确实想要创建n
个单独的变量,您可能最终会使用EVAL函数。 This question和this question显示了一些如何使用另一个变量的值创建变量名称的示例。
答案 1 :(得分:0)
如果你绝对必须使用多个变量,那么使用()表示法构造dynamic fieldnames会很方便。如果输入以下内容:
>> n = 1;
>> data.(sprintf('msgLength%u', n)) = [1 2 3 4];
>> n = 2;
>> data.(sprintf('msgLength%u', n)) = [5 6 7 8];
你将获得一个包含两个字段的结构:
>> data
data =
msgLength1: [1 2 3 4]
msgLength2: [5 6 7 8]
尽管如此,我还是第二个gnovice建议使用数组来存储数据而不是几个变量。您可以简单地向msgLength
添加另一个维度,因此第7行变为:
msgLength(n,countmsgLength(n),:)= [firstinSeq(x,:) [0 0 0 0 0 0]];