2016-12-09 7 views
0

通常、データはloadまたはcsvreadを使用してロードします。今、私は次のような構造でデータをロードする必要があります。そのloadcsvreadMatlab - 数値カラムとテキストカラムのデータを読み込む

0.1, 0.2, 0.3, 0.4, some_text 
0.5, 0.6, 0.7, 0.8, some_text2 
... 

彼らは数値のみを読むことができますので、両方無用です。私は、このようなreadtableを使用することができますが見つかりました:

readtable('file.txt', 'Delimiter', ',', 'Format', '%f%f%f%f%s'); 

今私は2つの問題を抱えて:

1)readtableは私のファイルは、ヘッダたと私はデータの1つの以下の行を持っていることを前提としています。

2)NX4テーブルではなくNX4ダブルマトリックス内のデータストア

これら2つの問題点を解決するための任意のヘルプ?私の場合、もっと便利な機能はありますか?

EDIT:

答えて

0

あなたのコード内textscanreadtableを交換し、あなたがあなたの例file.txtなどを使用して、ほとんどが

0.1, 0.2, 0.3, 0.4, some_text 
0.5, 0.6, 0.7, 0.8, some_text2 

で読むならテキストスキャン

fid = fopen('file.txt'); 
data = textscan(fid, '%f%f%f%f%s', 'Delimiter', ','); 
fclose(fid); 

次に、あなたが最初の4列

dataValues = [data{1:4}] 
dataValues = 
      0.1   0.2   0.3   0.4 
      0.5   0.6   0.7   0.8 
-1

これは動作するはずです:最後に、私が唯一のファイルからの数値(4列1)をロードする必要があります。あなたが./input.txtを保存したとします

1.1, 2.2, 3.3, 4.4, Hello world 
6.6, 7.7, 8.8, 9.9, How are you 

これを読むには、Matlabのネイティブライン・バイ・ライン解析機能textscanを使用します。ここでは、 '%s'は(Mathwork documentation)です。 別のセルにラップされています。要素を1つしか持たないセルhold_cellを抽出し、Nを1セルx_inで取得します。 残りは簡単です。文字列が単なる文字の配列であることを思い出してください。

fid = fopen('./input.txt'); 
hold_cell = textscan(fid, '%s', 'Delimiter', '\n'); 
x_in = hold_cell{1,1}; 
hold_size=size(x_in); 
N=hold_size(1,1); 

y_out =zeros(N,4); 
for i=1:1:N 
    hold_idx =strfind(x_in{i}, ',');% those positions of comma 
    y_out(i,1) =str2num(x_in{i,1}(1 : hold_idx(1)-1));% 1st number 
    y_out(i,2) =str2num(x_in{i,1}(hold_idx(1)+1 : hold_idx(2)-1));%2nd number 
    y_out(i,3) =str2num(x_in{i,1}(hold_idx(2)+1 : hold_idx(3)-1));%3rd number 
    y_out(i,4) =str2num(x_in{i,1}(hold_idx(3)+1 : hold_idx(4)-1));%4th number 
end 

disp(y_out); 

出力:

1.1000 2.2000 3.3000 4.4000 
6.6000 7.7000 8.8000 9.9000 
+0

なぜダウン票からデータを収集することができますか?説明してください。 – Aminopterin

+0

downvoterではありませんが、私はこれを使用するのか分かりません。私はファイルからデータをロードする必要があります。 – DimChtz

+0

私の編集が機能するかどうかチェックしますか? – Aminopterin

関連する問題