0

私はこれにかなり慣れていないので、プログラムを Fortran から Matlab に変換しようとしています。Fortran の READ 関数について質問があります。次の定義があります。

DIMENSION ET2(2),PV(6,12),PNUT(4),T(2),PJD(4),BUF(1500),SS(3),CVAL(400),PVSUN(3,2)
INTEGER LIST(12),IPT(3,13)

CHARACTER*6 TTL(14,3),CNAM(400)                                           
CHARACTER*80 NAMFIL 

COMMON/EPHHDR/CVAL,SS,AU,EMRAT,NUMDE,NCON,IPT                             
COMMON/CHRHDR/CNAM,TTL                                                    
COMMON/STCOMX/KM,BARY,PVSUN    

そして、私が理解し/翻訳しようとしている読み取りステートメントは次のとおりです。

READ(NRFILE,REC=1)TTL,CNAM,SS,NCON,AU,EMRAT,((IPT(I,J),I=1,3),J=1,12),NUMDE,(IPT(I,13),I=1,3)

READ(NRFILE,REC=2)CVAL 

英語は私の母国語ではないので、REC の定義を理解しているかどうか確信が持てません。たとえば、4 つの異なる整数で構成されるファイルがある場合、REC=2 は 2 番目の整数から読み取りを開始していることを示しますか?

第二に、次に何が起こるのか気になります。NRFILE からの情報は、さまざまな変数、TTL、CNAM に保存されていると思います...? NRFILE はバイナリ ファイルを参照していますが、各変数に格納する情報をプログラムがどのように認識しているかがわかりません。TTL と CNAM の次元が異なるため、同じ情報が両方に保存されていないと思いますか?

これがmatlabでどのように見えるか知っている人はいますか? これまでのところ、cval=fread(filID) しか記述できませんでしたが、REC ステートメントは無視しました。

4

2 に答える 2

0

fortranをmatlabに変換する場合は、f2matlabを試してください。多くの場合、それはあなたのために多くの仕事をすることができます。ただし、f2matlabの実行後、変換(これらのreadステートメントを含む)を確認する必要があります。

于 2012-08-06T23:11:06.820 に答える
0

「REC=n」は直接アクセス読み取り用です。直接アクセス ファイル内のレコードは、任意の順序で読み取ることができます。おそらく順不同です。あなたの例は、それらが順番に読み取られていることを示しているため、最初の2つの読み取りのみを示していますが、おそらくこの機能は使用されていません。通常、直接アクセス レコードは固定長です。おそらく、Fortran は、非ストリームのフォーマットされていないシーケンシャル ファイルに通常追加するレコード長情報を除外します。

I/O リストの変数は、レコード内のバイトから順にリストに表示されます。IPT は暗黙の do リストを使用して入力されます。十分に自明でない場合は、ここでそれに関する質問を見つけることができます。

ファイルの open ステートメントを表示すると役立つ場合があります。

于 2012-08-06T14:58:56.927 に答える