При назначении A(I) = B количество элементов в B и I должно быть одинаковым

Я ввожу '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> (ячейка размером 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 ответа

Может быть, линия

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}

Я нашел ответ:

p(i) = code128B{find(ismember(code128B,phrase(i)))-109,3};
p(i) = str2num(code128B{find(ismember(code128B,phrase(i)))-109,3});
Другие вопросы по тегам