2

fortranからバイナリデータファイルを書き込もうとしていますが、通常のファイルインターフェイスは非常に制限されているので、FortranにPOSIXコンパイル機能があるのではないかと思います。

私はこの標準を見つけました:IEEE 1003.9-1992、しかし私はそれがほとんどの一般的なコンパイラによって完全にサポートされているかどうか(またはフラグをアクティブにする必要があるかどうか)わかりません。実用的な情報が見つかりません。何か提案をいただけますか?

ところで、私は画像ファイルを書き込もうとしています。まず、tga/pgmを試してみたいと思います。また、外部ライブラリに依存関係を追加したくありません。ありがとうございます。

解決:

最後に、ppmファイルを書き込むことができ、内部ループの最後に改行を出力しないようにする必要がありました。最終的なコードは次のようになります

      subroutine imgwrite()
      implicit none
*     ******************************************************************
      include 'image.f'
*     ******************************************************************
      integer x, y, i

      write(imgunit, '(A)') 'P3'
      write(imgunit, '(I4)') imgwidth
      write(imgunit, '(I4)') imgheight
      write(imgunit, *) 255

      do 10 y=1, imgheight
        do 20 x=1,imgwidth
          write(imgunit,100) (int(imgpixels(x,y,i)*255D0), i=1,3)
20      continue
        write(imgunit,110)
10    continue


100   FORMAT(3(I4),$)
110   FORMAT((/))

      return
      end

FORTRANのPOSIXに関する情報は誰も提供していません。

ありがとう。

4

2 に答える 2

5

TGAはバイナリとはいえ非常に平易なフォーマットなので、FORTRANからでも書けるはずです。ただし、外部ライブラリの助けなしに FORTRAN で TIFF、PNG、GIF、または JPG を試したくはありません。

netpbm形式のファミリーの 1 つが書きやすく、表示や簡単なコマンドでさらに処理するために必要な TGA やその他の形式に簡単に変換できることに気付くかもしれません。PBM 形式には、純粋な ASCII とバイナリの両方のフレーバーが含まれているため、バイナリ ファイルへのアクセスに問題がある場合でも (非常に非効率的ではありますが) 書き込むことができます。このツール スイートには、約 100 の他の画像ファイル形式との間の変換が含まれています。

編集: FORTRAN から実際にファイルを作成する方法について、これ以上役に立てなくて申し訳ありませんが、私がこの言語を最後に使用したときは、パンチ カードが一般的でした。;-)

于 2009-04-14T10:21:06.360 に答える
0

他の言語が使用するバイナリ ファイルをランダムまたはシーケンシャルに読み書きする際の問題は、fortran io システムがファイル内の他の情報を使用することです。f77 標準にあったことを思い出すことはできませんが、確かにほとんどの pc および unix コンパイラがこれを行いました。

たとえば、バイナリシーケンシャルファイルに書き込む場合

write(bsf) doublevariable, realvariable

ファイルには次のものが含まれます(バイナリを読み取れる場合)

12<value of double><value of real>12

各レコードには、先頭と末尾に書き込まれたバイト単位の長さであるレコード マーカーがあります。これが必要なのは、各レコードの長さが異なる可能性があり、読み取り時にレコードに書き込まれたすべてを読み取る必要がないためです。たとえば、上記を読んでいた場合、

read(bsf) doublevariable

bsf の次の読み取りは、次のレコードの先頭にある必要があります。

そのため、他の言語と共有するバイナリ ファイルの読み取りまたは書き込みは、C または Fortran とは異なる言語で記述されたライブラリを介して行う必要があります。

于 2009-07-31T17:33:17.213 に答える