Stream-reading question

Tobias Burnus burnus@net-b.de
Sun Oct 8 08:07:00 GMT 2006


Hi Jerry,

Jerry DeLisle wrote:
> I agree with this and I will look into whats going on with formatted
> stream.  I would suggest simplifying the test case for the NEWLINE()
> intrinsic to avoid this problem and I will use the example you have
> given here as a test case for the stream I/O fix.
For new_line() I will use as suggested the simple achar(10) ==
new_line('a') test.

I have a better(?) test case for stream, see below. The test case below
works nicely with f95. g95 seems to have the same problems are gfortran,
plus some of its own.

One of the tests has been adapted from
http://groups.google.com/group/comp.lang.fortran/browse_thread/thread/8ad976f815df0fae/a2f51d975fa3a537

Tobias

program stream_test
    implicit none
    character(len=*), parameter :: rec1 = 'record1'
    character(len=*), parameter :: rec2 = 'record2'
    character(len=50) :: str1,str2
    integer           :: len, i
    real              :: r

    open(10,form='formatted',access='stream',&
         status='scratch',position='rewind')
    write(10,'(a)') rec1//new_line('a')//rec2
    rewind(10)
    read(10,*) str1
    read(10,*) str2
    if(str1 /= rec1 .or. str2 /= rec2) call abort()
    rewind(10)
    read(10,'(a)') str1
    read(10,'(a)') str2
    if(str1 /= rec1 .or. str2 /= rec2) call abort()
    close(10)

    open(10,form='formatted',access='stream',&
         status='scratch',position='rewind')
    write(10,*) '123 '//trim(rec1)//'  1e-12'
    write(10,*) '12345.6789'
    rewind(10)
    read(10,*) i,str1
    read(10,*) r
    if(i /= 123 .or. str1 /= rec1 .or. r /= 12345.6789) &
      call abort()
    close(10)

    open(unit=10,form='unformatted',access='stream', &
         status='scratch',position='rewind')
    write(10) rec1//new_line('a')//rec2
    len = len_trim(rec1//new_line('a')//rec2)
    rewind(10)
    read(10) str1(1:len)
    if(str1 /= rec1//new_line('a')//rec2) call abort()
end program stream_test



More information about the Fortran mailing list