2017-03-22 9 views
0

私は多くのタイムステップの結果を含むテキストファイルを持っています。時間ステップごとに、最初の行にいくつかの基本情報が保存され、続いてこのステップのための他のデータを含む行列が保存されました。マトリックスのサイズは、時間ステップごとに異なり、事前定義されていません。構造化されたテキストファイルを読み込んで、その構造をMatlabで作成するには?

このようなテキストファイルに基づいて構造を作成するにはどうすればよいですか?

ありがとうございます!

P.S.テキストファイル内の結果は次のようになります。

%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); 

結果:

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=で始まり、間隔を置いたラインで終わると仮定し、次のサンプルコードを使用することができます:

>>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

Thanks Rotem!私は時間ステップの最初の行すべてが1x7要素を含む下部構造main(i).sub1にあり、各時間ステップの下の行列がmain(i)になるように構造を保存することを考えています).2、これはMxN要素を含んでいます(M、Nは各時間ステップで変化します)。ここでは、i番目のタイムステップを指します。そして、私の質問のデータの編集版は、もはやテキストファイルの明確な構造を示していないと思います... – open0121

+0

あなたの投稿を間違って編集して申し訳ありません。あなたはあなたの投稿を再編集できますか? MxN要素をテキストファイル形式から取得する方法を明確にします。あなたが好きな構造を明確にします。テキストファイルの内容をすべて投稿しないでください。投稿するだけで十分です。 – Rotem

+0

こんにちはRotem、問題ありません!今のところその構造は明らかです。 – open0121

関連する問題