2

この投稿の最後に書いた簡単なテキストファイルを読む必要があります(これは単なる構造化されたグリッドです)。fortranでは、これを行うのはとても簡単です、あなたはただする必要があります:

    read(fileunit,*)
    read(fileunit,*) mc,nc
    do j = 1, nc 
       read (fileunit, *) dummy, dummy, (xcor(j,i), i=1,mc) 
    enddo 

fortranのように、要素ごとに読み取り、改行の後も読み取り続ける同等の関数はmatlabにありますか?私はそれを見つけることができませんでした、fscanf、textscanなどのすべての関数が行ごとに読み取られ、次に各行を解析する必要があります。これがファイルです。助けてくれてありがとうA。

Gridfile version 8.675.44
8     3
eta=    1   0.00000000000000000E+00    1.50000000000000000E+02             
            4.50000000000000000E+02    6.00000000000000000E+02
            4.50000000000000000E+02    6.00000000000000000E+02
            4.50000000000000000E+02    6.00000000000000000E+02 
eta=    2   0.00000000000000000E+00    1.50000000000000000E+02      
            3.00000000000000000E+02    4.50000000000000000E+02    
            7.50000000000000000E+02    9.00000000000000000E+02 
            4.50000000000000000E+02    6.00000000000000000E+02 
eta=    3   0.00000000000000000E+00    1.50000000000000000E+02      
            3.00000000000000000E+02    4.50000000000000000E+02    
            7.50000000000000000E+02    9.00000000000000000E+02   
            4.50000000000000000E+02    6.00000000000000000E+02 
4

1 に答える 1

3

これを行うには多くの方法がありますがfscanf、この例のように、その方法が気に入るかもしれません。のようなものでファイルを開きfin = fopen('gridfile.txt')、ヘッダーを飲み込んだ後、、、を使用してfscanf(f, 'x= %d')fscanf(f, '%f')ブロック全体を読み取ることができます。指示がない限り、行の終わりでfscanf 停止しません。まとめると、ソリューションは次のようになります。

fin = fopen('gridfile.txt');
fgetl(fin);
% read data counts
cnt = fscanf(fin, '%d %d', 2);
mc = cnt(1);
nc = cnt(2);
xcor = zeros(nc, mc);
% read blocks of data
for j = 1 : nc
    fscanf(fin, '%s %s', 2);
    xcor(j, :) = fscanf(fin, '%f', mc)';
end
fclose(fin);

fscanfフォーマット指定子と可能な限り一致し続け、連続する一致が見つからない場合にのみ戻ります。上記の例では、これを2か所で使用しています。最初に、cnt例(8、3)で次元を抽出し、次に、レコードごとに8つの連続する浮動小数点値を読み取ります。

于 2013-02-05T23:10:07.407 に答える