2017-03-22 8 views
0

많은 시간 단계에 대한 결과가 포함 된 텍스트 파일이 있습니다. 각 시간 단계마다 일부 기본 정보가 첫 번째 줄에 저장되고 그 다음에이 단계의 다른 데이터가 포함 된 행렬이 저장됩니다. 행렬 크기는 매 시간 단계마다 다를 수 있으며 사전 정의되지 않습니다.구조화 된 텍스트 파일을 읽고 Matlab에서 구조화 된 파일을 만드는 방법은 무엇입니까?

이러한 텍스트 파일을 기반으로 구조를 만드는 방법은 무엇입니까?

미리 감사드립니다.

P. 텍스트 파일의 결과는 다음과 같습니다

time= 4.3750000000000001E-004   3   7   4   1 4.9999989999999998E-004 
    0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 
    0.0000E+00 0.0000E+00 5.6569E+08 7.5717E+08 5.6569E+08 0.0000E+00 0.0000E+00 
    0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 
    0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 

time= 5.0000000000000001E-004   3   5   3   0 4.9999989999999998E-004 
    0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 
    0.0000E+00 0.0000E+00 2.3593E+08 0.0000E+00 0.0000E+00 
    0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 

time= 1.8125000000000001E-003   3   3   3   1 1.8749999000000001E-003 
    0.0000E+00 0.0000E+00 0.0000E+00 
    0.0000E+00 3.9138E+07 0.0000E+00 
    0.0000E+00 0.0000E+00 0.0000E+00 

답변

1

데이터 time=에 의해 시작 간격 선으로 끝나는 각 새로운 가정, 다음 코드 샘플 사용할 수 있습니다

%Open text file for reading (assume file name is 'Data.txt'). 
f = fopen('Data.txt', 'r'); 

%Initialize main (store data) to empty matrix. 
main = []; 

%Initialize index to 1 
i = 1; 

while (~feof(f)) 
    %Read single line from text file (as long string). 
    S = fgets(f); 

    if (strfind(S, 'time') > 0) 
     %Remove 'time= ' from the beginning of S. 
     S = strrep(S, 'time=', ''); 

     %Convert string to array of numbers. 
     T = sscanf(S, '%f '); 

     %Store vector T to main(i).sub1 
     main(i).sub1 = T'; 

     %Set A to empty matrix - prepare for filling with new data. 
     A = []; 

     %Read next line from text file (as long string). 
     S = fgets(f);   
    end  

    %Convert string to array of numbers. 
    L = sscanf(S, '%f '); 

    if (isempty(L) || feof(f)) 
     %Store matrix A to main(i).sub2 
     main(i).sub2 = A; 

     %Advance i (data index) by 1. 
     i = i + 1; 
    else 
     %In case A is not empty, concatenate T to bottom of A. 
     A = [A; L']; 
    end 
end 

%Close file. 
fclose(f); 

결과 :

>>main(1) 

sub1 = 

    4.3750e-04 3.0000e+00 7.0000e+00 4.0000e+00 1.0000e+00 5.0000e-04 

sub2 = 

      0   0   0   0   0   0   0 
      0   0 565690000 757170000 565690000   0   0 
      0   0   0   0   0   0   0 
      0   0   0   0   0   0   0 


>>main(2) 

sub1 = 

    0.00050 3.00000 5.00000 3.00000 0.00000 0.00050 

sub2 = 

      0   0   0   0   0 
      0   0 235930000   0   0 
      0   0   0   0   0 


>>main(3) 

sub1 = 

    0.0018125 3.0000000 3.0000000 3.0000000 1.0000000 0.0018750 

sub2 = 

      0   0   0 
      0 39138000   0 
      0   0   0 
+0

감사합니다. Rotem! 나는 시간 단계의 모든 첫 번째 줄이 1x7 요소를 포함하는 하부 구조 'main (i) .sub1'에있을 것이며, 각 시간 단계 아래의 행렬은 main (i)이 될 것입니다.) .2, 이것은 MxN 요소를 포함합니다 (M, N은 각 시간 단계마다 다릅니다). 여기서 i는 i 번째 시간 간격을 나타냅니다. 그리고 내 질문에 데이터의 편집 된 버전을 더 이상 텍스트 파일의 명확한 구조를 표시하지 않는 것 같아요 ... – open0121

+0

죄송 게시물을 잘못 편집 (너무 지저분 해 보였다). 게시물을 다시 편집 할 수 있습니까? 텍스트 파일 형식에서 MxN 요소를 가져 오는 방법을 명확히하십시오. 당신이 좋아하는 구조를 명확하게하십시오. 텍스트 파일의 모든 내용을 게시하지 마십시오. 게시물을 명확하게 작성할 수있을 정도로 게시하십시오. – Rotem

+0

안녕하세요, Rotem, 문제 없습니다! 지금 구조는 포스트에서 명확하다. – open0121