2013-08-28 1 views
0

I вход «тест» в качестве строки, фразы, и это дает мне следующую ошибку:В назначениях А (I) = В, число элементов в B и я должен быть таким же

>> 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, а в точке г = 1, р = [] (и пустой массив до сих пор), code128B = < 108x3 клеток> (A 108 на 3 ячейки, заполненные строками), а фраза = 'тест'. Следующая строка дает мне ошибку выше. Я пробовал делать:

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}; 

Возвращает правильные переменный, так что я знаю, это много работы. Это просто не работает, когда я повторяю его. Как я могу это исправить?

+0

Кроме того, я попытался changeing код, чтобы при г = 1: длина (code128B), который должен сделать число элементов в I и B таким же, но я все равно получаю ту же ошибку. Даже если это не работает, как только i> 4, как фраза = 'тест', длина которой составляет 4 символа. – user2723629

+0

Что такое code128B.mat? – Marcin

ответ

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} 
+0

Я бы рекомендовал использовать 'find (x, 1)' для поиска первого, или в этом случае 'find (ismember (code128B, phrase (1)), 1)' –

0

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

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