2009-04-14 81 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的语言来完成,