在赋值A(I)= B中,B和I中的元素数必须相同

时间:2013-08-28 01:51:03

标签: matlab variable-assignment elements

我输入'test'作为字符串,短语,它给出了以下错误:

    >> CreateBarcodePattern('test')
In an assignment  A(I) = B, the number of elements in B and I must be the same.

Error in CreateBarcodePattern (line 5)
    p(i) = code128B{find(ismember(code128B,phrase(i)))-109,3};

CreateBarcodePattern函数如下:

function [p] = CreateBarcodePattern(phrase)
load('code128B');
p = [];
for i = 1:length(phrase)
    p(i) = code128B{find(ismember(code128B,phrase(i)))-109,3};
end

我在第5行放置了一个断点,在点i = 1,p = [](到目前为止为空数组),code128B =< 108x3 cell> (一个108乘3个单元格的字符串),而短语='test'。 下一行给出了上面的错误。 我试过了:

load('code128B.mat')
p = [];
phrase = 'test';
p(1) = find(ismember(code128B,phrase(1)))-109;
p(1) = code128B{p(1),3}

但在最后一行错误:

In an assignment  A(I) = B, the number of elements in B
and I must be the same.

再次给出。在错误之前,p = 84这是我所期待的,这是由于前一行p(1) = fi... 这一行:

code128B{find(ismember(code128B,'t'))-109,3};

返回正确的变量,所以我知道这很有效。当我迭代它时,它不起作用。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

也许是行

find(ismember(code128B,phrase(1)))

返回的索引超过1个。 p(1)只需要一个元素。

如果您只想要第一个索引,那么请执行以下操作:

Idx = find(ismember(code128B,phrase(1)));
Idx = sort(Idx); % Am just assuming you need to sort!
p(1) = Idx(1) - 109;
p(1) = code128B{p(1),3}

答案 1 :(得分:0)

我找到了答案:

p(i) = code128B{find(ismember(code128B,phrase(i)))-109,3};
p(i) = str2num(code128B{find(ismember(code128B,phrase(i)))-109,3});