2013-12-20 2 views
0

Я пытаюсь прочитать тег из XML и затем хочу связать его с ним. Во-первых, я сохраняю значение строки переменной и пытаюсь объединить ее с переменной в цикле for. Но это порождает ошибку.Как объединить строку, хранящуюся в переменной, и число в MATLAB

for i = 0:tag.getLength-1 
       node = tag.item(i); 
       disp([node.getTextContent]); 

       str=node.getTextContent; 

       str= strcat(str, num2str(i)) 
       new_loads = cat(2,loads,[node.getTextContent]);     
      end 

Ошибка выброшен является

Operands to the || and && operators must be 
convertible to logical scalar values. 

Error in strcat (line 83) 
if ~isempty(str) && (str(end) == 0 || 
isspace(str(end))) 

Error in SMERCGUI>pushbutton1_Callback (line 182) 
       str= strcat(str,' morning') 

Error in gui_mainfcn (line 96) 
    feval(varargin{:}); 

Error in SMERCGUI (line 44) 
gui_mainfcn(gui_State, varargin{:}); 

Error in 
@(hObject,eventdata)SMERCGUI('pushbutton1_Callback',hObject,eventdata,guidata(hObject)) 


Error while evaluating uicontrol Callback 
+0

поэтому ошибка указана в строке 'str = strcat (str, num2str (i))', правильно? Вы также можете попробовать: 'str = [str num2str (i)]'; –

ответ

1

ошибка говорит о том, что ваша строка не является строкой. Мне непонятно, вызывает ли это ошибку на линии strcat или на последней линии cat.

Во всяком случае должно быть ясно, что вы не можете объединять элементы разных типов в массив - массив ячеек да, обычный массив нет. Таким образом, линия

new_loads = cat(2,loads,[node.getTextContent]); 

обязательство проблемы. 2 является числовым, а node.getTextContent - это строка - или, может быть, массив ячеек или что-то еще. Я не вижу, что такое loads, поэтому я не могу сказать, связано ли это с проблемой.

Обычно хороший способ объединить числа и строки в одну строку в

newString = sprintf('%s %d', oldString, number); 

Вы можете использовать все приемы форматирования printf, чтобы произвести вывод именно так, как вы хотите. Но прежде чем что-либо сделать, убедитесь, что вы понимаете тип всех элементов, которые вы пытаетесь объединить. Самый простой способ сделать это для всех элементов в памяти

whos 

Или если вы просто хотите его для одной переменной,

whos str 

Или все переменные, начинающиеся с с:

whos s* 

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

EDIT основан на том, что я прочитал в http://blogs.mathworks.com/community/2010/11/01/xml-and-matlab-navigating-a-tree/, вполне возможно, что вам просто нужно отдать свой str переменную в строку Matlab (по-видимому, это java.lang.String). Попробуйте добавить

str = char(str); 

перед использованием str. Это может быть то, что вам нужно.

+0

Хорошее предложение! Я работал над этим! Спасибо – MAV

Смежные вопросы