2

私はfortranの初心者です。

Microsoft Developer Studio 4.0 を使用してプログラムを作成し、バイナリ ファイルを作成しました。次のように開きます。

      OPEN(2,FILE='output_bin.bin',FORM='UNFORMATTED')

私はそれに配列を書き込み、INTEGER*2 IHIST(30)現在は0から29までの数字で埋められています。書き込みは次のように行われます:

      DO 351 J=0,29
      WRITE(2) IHIST(J)
351   CONTINUE

Windows では、生成されたバイナリ ファイルを読み取ることができます。アレイを回復できます。

次に、Ubuntuで読みたいと思います。ここで、私の問題が発生Fortran runtime error: End of fileします。次の操作を行うと、 が発生します。

     INTEGER*2 RBIN(30)
     WRITE(*,*)'Extracting data from binary file ', filename
     OPEN(3,FILE=filename,FORM='UNFORMATTED',ACTION='READ'
 +   ,STATUS='OLD')

     DO 17 I=0,29
     READ(3) RBIN(I)
17   CONTINUE

シーケンシャルでフォーマットされていないバイナリファイルを読み取る方法を誰かに説明してもらえますか? 私は何を間違っていますか?次の読書の開始位置は、後者の終わりになると思いました。

GNU Fortran (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2 を使用して Ubuntu 12.04 でコンパイルしています。

4

1 に答える 1

3

次のように、書き込み可能なストリーム アクセス ファイルを開きます。

      OPEN(2,FILE=filename,FORM='UNFORMATTED',
     +     ACCESS='STREAM',STATUS='REPLACE')

次に、次のように読みます。

      OPEN(3,FILE=filename,FORM='UNFORMATTED',
     +     ACCESS='STREAM',STATUS='OLD')

たとえば、gfortran でコンパイルされた x64 Linux プラットフォームで記述し、Intel Fortran でコンパイルされた Windows PC で読み取る場合、問題は発生しないはずです。ただし、エンディアンが異なる異なるプラットフォーム(POWER5 と x64 など) で読み取り/書き込みを行うと、問題が発生する可能性があります。

于 2016-10-06T04:38:37.697 に答える