2016-07-09 22 views
0

Ich versuche, eine Reihe von Zeichenfolgen in einer Schleife in eine variable Array zu verketten, aber die resultierenden Zeichenfolgen sind immer in geschweiften Klammern. Warum passiert das und wie kann ich die Zeichenfolge ohne sie verketten? DankMatlab verketten variable Zeichenfolge ohne geschweifte Klammern

subs = {'abc001' 'abc002' 'abc003' 'abc004'}; 
for i = 1:size(subs,2) 
    subject = subs(i); 
    files_in(i).test = strcat('/home/data/','ind/',subject,'/test_ind_',subject,'.mat'); 
end 

files_in(1) 

% ans = 
% test: {'/home/data/ind/abc001/test_ind_abc001.mat'} 

Ich würde es sein mag:

test: '/home/data/ind/abc001/test_ind_abc001.mat' 

Antwort

2

subs ist ein Zellenfeld. Wenn Sie es mit () Notation indexieren, werden Sie auch erhalten ein Zellenarray.

a = {'1', '2', '3'}; 
class(a(1)) 
% cell 

Um die Zeichenfolge innerhalb des Zellenfeldes erhalten Sie {} Notation Index in sie verwenden müssen.

class(a{1}) 
% char 

Wenn Sie strcat mit Zellen-Arrays verwenden, wird das Ergebnis ein Zellenfeld sein. Wenn Sie es mit Strings verwenden, wird das Ergebnis eine Zeichenfolge sein. Also, wenn wir (k) mit {k} ausschaltet bekommen wir, was Sie erwarten.

for k = 1:numel(subs) 
    subject = subs{k}; 
    files_in(k).test = strcat('/home/data/ind/', subject, '/test_ind_', subject, '.mat'); 
end 

Einige Randnotizen:

  1. nicht i als Variable verwenden. i und j werden in MATLAB verwendet, um sqrt(-1) anzuzeigen.

  2. Es wird empfohlen, fullfile zu verwenden, um Dateipfade anstelle von strcat zu erstellen.

+0

Danke für die Antwort und diese Randnotizen! Ich bin neu bei Matlab, also packe ich immer noch solche Dinge auf. – Jon

Verwandte Themen