program temp_conv
implicit none
integer::i,n
real::f,c
integer::in=10,out=11 ! unit numbers
!open the files
open(unit=in,file='fahr.data',action='read')
open(unit=out,file='celsius.data',action='write')
!read and write how many temperatures
read(unit=in,fmt=*) n
write(unit=out,fmt=*) n
do i=1,n
read(unit=in,fmt=*) f
c=9.0/5.0*(f-32)
write(unit=out,fmt=*) c
print*,i,' F=',f,' is C=',c
end do
end program temp_conv
\endlstlisting}
The open, close, read and write functions can be checked if they performed
ok using the IOSTAT parameter. In our case we check whether
end-of-file was reached and if so we exit the loop. This way there
is no need to have the number of temperatures as the first number in the file.
%%
\begin{verbatim}
program temp_conv_3
implicit none
real::f,c
integer::iostatus
!open the data file, F
open(unit=10,file='fahr2.data',action='read',iostat=iostatus)
!check if the file was opened properly
if(iostatus.NE.0) then
print*,'Data file could not be opened'
stop ! terminates the program
end if
!open the result file
open(unit=11,file='celsius2.data',action='write',iostat=iostatus)
!check if the file opened properly
if(iostatus.NE.0) then
print*,'Output file cannot be opened'
stop
end if
do
read(unit=10,fmt=*,iostat=iostatus) f
!check if this is a valid read
if(iostatus.NE.0) then
print*,'end of file reached'
exit
end if
c=5.0/9.0*(f-32)
write(unit=11,fmt=*) c
end do
end program temp_conv_3