2017-11-01 6 views
0

OpenFoam에서 특정 위치의 속도를 추출하는 데이터 파일을 만들었습니다. 나는이 두 가지 속도를 추출하여 시간 평균을 취하고 싶습니다. 예를 들어, 프로브 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