2016-08-18 16 views
0

私はこの生データ(文字列)を持っています。私は最初に数値に変更し、スラッシュを削除して3番目の列を2つに分割して、最終的な答えが4列の行列になるようにします。行列からのデータの抽出

[-0.095] [ 3.251] '0.152/0.0415' 
[ NaN] [ NaN] [   NaN] 
[ 3.194] [ 3.194] [   NaN] 
[ 3.251] [ 9.911] '0.152/0.0387' 
[ NaN] [ NaN] [   NaN] 
[ 9.854] [ 9.854] [   NaN] 
[ 9.911] [16.571] '0.152/0.0387' 
[ NaN] [ NaN] [   NaN] 
[16.514] [16.514] [   NaN] 
[16.571] [23.211] '0.129/0.0535' 
[23.154] [23.154] [   NaN] 
[23.211] [29.851] '0.129/0.0535' 
[29.794] [29.794] [   NaN] 
+1

あなたは 'strsplit'見てきましたか? https://uk.mathworks.com/help/matlab/ref/strsplit.html – GameOfThrows

+0

サンプルデータの角括弧は文字列の一部ですか、別々のセルに文字列を表示していますか? – Tar

答えて

0

入力データがInput.txtファイルであるとします。
出力行列はAです。
コードは、行形式ファイルを文字列に読み込み、sscanfを使用して文字列を解析してベクトルにします。
解析された各ベクトルは、行列Aの最後に付加されます。
stringが除算を持たない(最後の要素がNaNの場合)特殊ケースのコードテスト。次

チェック:

f = fopen('Input.txt', 'r'); 

A = []; 

while ~feof(f) 
    s = fgets(f); %Read row from file. 

    if isempty(strfind(s, '/')) 
     Q = [sscanf(s, '[%f] [%f]'); NaN; NaN]; %First case: last element is NaN: [ 3.194] [ 3.194] [   NaN] 
    else 
     Q = sscanf(s, '[%f] [%f] ''%f/%f'''); %Second case: last element is x/y: [ 3.251] [ 9.911] '0.152/0.0387' 
    end 

    %Concatenate vector Q to the bottom of A matrix; 
    A = [A; Q'];  
end 

fclose(f);