2016-03-20 16 views
0

可変長セル配列の出力を単一の列セル配列に書き込もうとしています。可変長セルの出力をMATLABの単一列セル配列に書き込む

例:

私は入力ファイルとして

A a;b 
B c 
C b;c 
D a;b;d 
E e;g;h 
F a;b 

を持っています。私は、行内の別々のセルに2列目のすべてのエントリを読んで、以下のような出力を保存する:

a 
b 
c 
b 
c 
a 
b 
d.... and so on. 

私はしかし、私は出力を書き込むことができません

for m=1:size(txt) 
c(:,m)=strsplit(txt{m},';'); 

end 

を試してみました私はcの寸法はsize(txt)のそれよりべきであることを理解しますが、私はないです

Assignment has more non-singleton rhs dimensions than non-singleton subscripts 

:列と、次のエラーを取得へ入力方法は、cの出力を最初の空のセルに書き込んでください。

答えて

2

これは、cをマトリックスと宣言していますが、1つの列にしたいからです。さらに、strsplitセルアレイの結果を生成します。各分割文字列は、セル配列の要素に配置されます。また、このセル配列は行単位のセル配列です。つまり、1 x Nのセル配列を取得します。Nは、strsplitという呼び出しで生成された文字列の総数です。

このように、私がお勧めするのは、各行を繰り返し処理し、最後に最後のセル配列を連結して作成する際に、すべての文字列を格納するマスターセル配列を作成することです。あなたはこの時点までに書いたコードを仮定し

が正しい、このような何かを:

c = cell(numel(txt), 1); 
for m = 1 : numel(txt) 
    c{m} = strsplit(txt{m}, ';'); 
end 

c = horzcat(c{:}); 

最初の行は、テキストファイルの行ごとに私たちの文字列分割文字を格納するためのマスターセル配列を作成します。次に、ファイルの各行について、セミコロン文字を区切り文字として分割し、これらの分割結果をマスター配列の右のセルに配置します。これが終了すると、horzcatを使用して、すべての文字を最後に1行のセルに配置します。これは、セル配列要素のを作成します。多くの行方向のセル配列を連結して単一の行にするため、horzcatを使用する必要があります。これを垂直にしようとするとエラーになります。列を必要とする場合は、結果を単に転記してください:

c = horzcat(c{:}).'; 
関連する問題