2009-04-14 83 views
2

我想從fortran編寫二進制數據文件,但我發現常規文件接口非常有限,不知Fortran是否具有POSIX編譯功能。是Fortran 77 POSIX是否符合? - 寫二進制文件

我發現這個標準:IEEE 1003.9-1992,但我不知道它是否完全支持最常見的編譯器(或者如果我必須激活任何標誌)。我找不到任何實際的信息,你能給我任何建議嗎?

順便說一句我正在嘗試寫圖像文件,首先我想用tga/pgm來嘗試。另外我不想添加任何依賴到外部庫,謝謝!

解決方案:

最後我能寫ppm files,我不得不avoid printing newline在內部循環結束,最終的代碼是這樣的:

 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的信息。

謝謝。

回答

5

即使它是二進制的,TGA也是一個非常簡單的格式,所以應該可以從FORTRAN編寫它。但是,如果沒有外部庫的幫助,我不想在FORTRAN中嘗試TIFF,PNG,GIF或JPG。

您可能會發現netpbm格式的一個格式更容易編寫,並且它們可以很容易地轉換爲TGA或任何其他可能需要用於顯示或使用簡單命令進一步處理的格式。 PBM格式包括純ASCII和二進制風格,因此即使二進制文件訪問有問題,它們也可以被寫入(儘管非常低效)。該工具套件包含大約100種其他圖像文件格式的轉換。

編輯:對不起,我不能更有用的關於如何從FORTRAN寫入文件,但打孔卡在上次使用該語言時很常見。 ;-)

0

讀取和寫入其他語言使用的隨機或順序二進制文件時遇到的問題是Fortran io系統使用文件中的其他信息。我不記得它是在f77標準中,但絕大多數pc和unix編譯器都這樣做。

例如,如果寫入二進制順序文件

write(bsf) doublevariable, realvariable 

那麼該文件將包含(如果你能讀懂二進制)

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

每個記錄有記錄標記這是在字節長度寫在前面和結尾的內容。 這是必需的,因爲每個記錄可以有不同的長度,當讀取一個記錄時不必讀取爲記錄寫入的所有內容。 例如,如果一個正在讀上面的人能有

read(bsf) doublevariable 

BSF下一次讀取需要在下次記錄的開始。

因此,讀取或寫入二進制文件以與其他語言共享應該通過用C編寫的庫或任何不符合Fortran的語言來完成,