2016-09-21 12 views
0

テキストファイルからデータをインポートしようとしました。データファイル形式は、xlsファイルと同様に、最初の行はchar、その他は数値です。しかし、このファイルは他のソフトウェアによってテキストファイルとして生成され、すべてのデータが1つの行にあり、1つのスペースバーが区切られ、新しいデータ行として「タブ」が表示されます。Matlab importdataテキストファイル

私はMathWorks社のMATLABにインポートするデータの形式は次のようにする必要があります:

A B C D 
1 2 3 4 
5 6 8 8 
8 0 9 5 

しかし、今のテキストファイル内のデータは、私はにテキストファイルをインポートする必要がありますどのように

A B C D 1 2 3 4 5 6 8 8 8 0 9 5 

ですマトリックスのようなmatlabはどうですか?私はimportdataを試しましたが、ansは4x1セルです。私のMatlabのバージョンは2008です。

私は非常にmatlabに慣れています。ありがとうございました。

編集: 私はデータが

A B C D 1 2 3 4 5 6 8 8 8 8 0 9 5 7 0 8 8 8 5 0 9 9 

使用すると、1つのchar /ナンバーワンのセルで、どのように細胞内にこれらの事を置くために私にしてください教えて頂けませんかであることに気づきましたか?

A B C D 
    1 2 3 4 
5 6 8 8 8 
    8 0 9 5 
7 0 8 8 8 
    5 0 9 9 

だって示唆したように、私はcell2matを使用する場合、エラーMSGがCAT arguments dimensions are not consistent.

はどうもありがとうございました!

+0

あなたは二つの異なるタイプ(ダブルとチャー)があるので、それはありませんすべてを1つのマトリックスに入れることが可能です。これが '' mportdata'がセル配列を生成する理由です。 – bushmills

+0

まだ2008年版のMatlabを使用していますか? – Bernhard

+0

私たちはライセンスを支払っていませんか? = P –

答えて

1

テキストファイルから生成したセル配列から始めましょう。私はそれをAと呼ぶ。それは4x1です。それとも1x4ですか?次の行で、私たちは私たちが同じポイントからスタートしていることを確認してください。

A = A(:); % make sure A is columnar 

Aは数字の文字列としてを含む最後に名前と2日からを含む最初の要素をもつセル配列です。


ケース1:各セクションの一貫したサイズ:ここでは行列に

を作る我々は、このセルアレイからご希望の行列を抽出する方法について説明します。今では、各セルにこの機能を適用し、行列にベクトルを結合する必要があり

v = strread(A{2}) 

v = 

    1  2  3  4 

まず、我々は文字列(あなたはまた、textscanを使用することができます)からベクトルを作るためにstrreadを必要としています。それはcellfunを使用して達成することができたが、我々は最初のセル配列を生成する必要があるため、最後に私たちはcell2mat必要があります。ここでは

M = cell2mat(cellfun(@strread, A(2:end), 'UniformOutput', false)) 

Mは、最終的な結果です。

M = 

    1  2  3  4 
    5  6  8  8 
    8  0  9  5 

ケース2:文字/番号を組み合わせ+サイズの矛盾:セル配列

を作る私たちは、一つのセルを占有し、各要素を持つセル配列にデータを変換したいです。 celldataの最初の行から開始し、我々はstrsplitを使用してセル配列に名前の文字列を破ることができます。

celldata = strsplit(A{1}); 

% maximum data count in each cell of A 
maxL = max(cellfun(@(x) numel(strsplit(x)), A)); 

% constructing an empty cell array to be filled with the data 
% the importance of this step dramatically increases with the data size! 
celldata{numel(A), maxL} = []; 

今、あなたがcelldata通過し、適切な値でそれのセルを埋めることができます。

for ii = 2:numel(A) 
    val = strread(A{ii}); 
    celldata(ii, 1:numel(val)) = num2cell(val); 
end 

celldataは、このフォームでセル配列です:

celldata = 

    'A' 'B' 'C' 'D'  [] 
    [1] [2] [3] [4]  [] 
    [5] [6] [8] [8] [8] 
    [8] [0] [9] [5]  [] 
    [7] [0] [8] [8] [8] 
    [5] [0] [9] [9]  [] 
+0

ありがとう!私はさらにおねがいしますか?私はテキストファイルのデータが不変のサイズであることに気付きました。それは「B C D 1 2 3 4 5 6 9 8 8 8 8 0 9 5」のようでした。エラーmsgは 'CAT引数の次元が一貫していません。' – Cii

+0

あなたは@Ciiを歓迎します。 2つの質問:おそらく最後のものを除いて、サイズはすべて一貫していますか?その場合、最後のもので何をするのが好きですか?それを削除するか、0/NaNで拡張しますか? – erfan

+0

ああ申し訳ありませんが、今すぐデータセットのサイズを表示できませんでした。データは今や真ん中のセットにもう1つのデータがあります。 5,6,8,8の代わりに、今度は5,6,8,8,8になります。これは現在1倍5倍、他は1倍4倍です。たぶん私はマトリックスをより良く示すために私の質問を編集するでしょう。 – Cii

関連する問題