binary i/o files

02-16-2009, 05:33 PM

I am trying to write a data file which stores the contents of an array. I am able to store the values in an ASCII format. I would like to store it in a binary format, hence can someone please let me know how to read and write binary files in fortran 90


02-17-2009, 04:31 PM to read and write binary files in fortran ...

! Write a binary file with gfortran
! davekw7x
program BinaryWriter

implicit none

real x
integer i

open(unit=8,file='gfortran.bin', form='UNFORMATTED',ERR=1000)

do i=1,40
x = x * 2.0
write(8,ERR=1001)i, x

write(*,'("Number of lines written = ", I5)', ERR=1001) i-1

1000 write(*,'(" Error opening file for writing.")')

1001 write(*,'(" Error writing with i = ", I5)') i

end program BinaryWriter

! Read a binary file with gfortran
! davekw7x
program BinaryReader

implicit none

integer intvalue
real realvalue

integer i

open(unit=8,file='gfortran.bin',form='UNFORMATTED' ,status='OLD')

i = 1
read(8,END=999,ERR=1000) intvalue, realvalue
write(*,'(I5, ": ", 1PE13.6)') intvalue, realvalue
i = i + 1

999 write(*,'(/"End-of-file when i = ",I5)') i

1000 write(*,'(/"ERROR reading when i = ",I5)') i

end program BinaryReader

Output from BinaryReader when reading the file created by BinaryWriter (GNU gfortran 4.1.2 on Centos 5.2 Linux):

1: 2.000000E+00
2: 4.000000E+00
3: 8.000000E+00
4: 1.600000E+01
5: 3.200000E+01
6: 6.400000E+01
7: 1.280000E+02
8: 2.560000E+02
9: 5.120000E+02
10: 1.024000E+03
11: 2.048000E+03
12: 4.096000E+03
13: 8.192000E+03
14: 1.638400E+04
15: 3.276800E+04
16: 6.553600E+04
17: 1.310720E+05
18: 2.621440E+05
19: 5.242880E+05
20: 1.048576E+06
21: 2.097152E+06
22: 4.194304E+06
23: 8.388608E+06
24: 1.677722E+07
25: 3.355443E+07
26: 6.710886E+07
27: 1.342177E+08
28: 2.684355E+08
29: 5.368709E+08
30: 1.073742E+09
31: 2.147484E+09
32: 4.294967E+09
33: 8.589935E+09
34: 1.717987E+10
35: 3.435974E+10
36: 6.871948E+10
37: 1.374390E+11
38: 2.748779E+11
39: 5.497558E+11
40: 1.099512E+12

End-of-file when i = 41

Important Note: Programs like these can be compiled with just about any compiler for Fortran 77, Fortran 90, Fortran 95, etc.


Binary files written like this may not be able to be read by programs compiled with other compilers---not even later versions or earlier versions of the same compiler!

For example, binary files written by GNU g77 (or just about any other Fortran that I have heard of) can not be read with GNU gfortran compilers earlier than 4.2 (version 4.1.something is supplied in RedHat EL5 and Centos 5 Linux distributions, among others), but they are compatible with GNU gfortran 4.2.x (supplied in recent Fedora and Ubuntu distributions, among others).

Bottom line: With Fortran binary files: Your Mileage May Vary! Really.