2017-11-01 2 views
0

OpenFoamから特定の場所で速度を抽出するデータファイルを作成しました。私はこれらの速度の2つを抽出し、時間平均を取ることを望みます。たとえば、プローブ0から0.0539764,0.0104665,0.00201741などの数値を抽出したいと思います。プローブ1から0.690374、0.711402、0.699848などの数値を抽出します。これはどのようにMatlabで行うことができますか?括弧内の数字をインポート

これまでも同様のことをしましたが、プローブは1つの数字(括弧なし)で構成されていましたが、今度は括弧で囲まれた3つの数字で構成されています。

大変助かります。ファイル全体へ

リンク:https://drive.google.com/file/d/0B9CEsYCSSZUSdjFzYXVFc1RhM0k/view?usp=sharing enter image description here

+2

正規表現の使用方法を学びます。 MATLABでは、['regexp'](https://www.mathworks.com/help/matlab/ref/regexp.html)関数を使用します。正規表現を使用できることは、あなたが行っているプログラミングの種類にかかわらず、あなたによく役立ちます。 – buzjwa

答えて

1

これは二つの行列probe0 & probe1を作成します。それがすべての場合は、それぞれの最初の列だけをインデックスすることができます。

id = fopen('testprobe.txt','r'); 
t = textscan(id,'%s','delimiter',sprintf('\n')); 
fclose(id); 

out = regexp(t{1,1}(6:end-3), '(?<=\()[^)]*(?=\))', 'match', 'all'); 

probe0 = zeros(size(out,1),3); 
probe1 = zeros(size(out,1),3); 

for i = 1:size(out,1) 
    if ~isempty(out{i,:}) 
     probe0(i,:) = (str2double(split(out{i,1}{1,1})))'; 
     probe1(i,:) = (str2double(split(out{i,1}{1,2})))'; 
    else 
     probe0(i,:) = [0,0,0]; 
     probe1(i,:) = [0,0,0]; 
    end 

end 
+0

あなたの答えをありがとう、それはほとんど動作しています、マトリックス/ベクトルは一致していないようです。あなたのコードは4361x1ベクトルを生成し、[0.05:0.05:218.5];は4370x1ベクトルなので、9つの数字がありません。あなたはその問題が何であるかの考えを持っていますか?私はregexp(t {1,1}(5:end)にコードを調整しました........... – ursmooth