2016-07-09 1 views
0

ループ内の一連の文字列を変数配列に連結しようとしていますが、結果の文字列は常に中括弧で囲みます。なぜこれが起こるのですか?また、それらの文字列を使わないで文字列を連結するにはどうすればいいですか?おかげMatlabは中括弧なしの変数文字列を連結します

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

私はそれがしたいと思います:

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

答えて

2

subsはセル配列です。 ()表記を使用してインデックスを作成すると、セル配列が取得されます。

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

あなたがそれにインデックスに{}表記を使用する必要がセル配列の内部文字列を取得します。

class(a{1}) 
% char 

strcatをセル配列に使用すると、結果はセル配列になります。文字列とともに使用する場合、resutは文字列になります。したがって、(k){k}に切り替えると、あなたが期待するものが得られます。

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

いくつかのサイドノート:

  1. 変数としてi使用しないでください。 iおよびjは、sqrt(-1)を示すためにMATLABで使用されます。

  2. strcatではなく、ファイルパスを構成する場合は、fullfileを使用することをお勧めします。

+0

回答ありがとうございました!私はmatlabに新しいので、私はまだそのようなものを選んでいます。 – Jon

関連する問題