Stream-reading question
Jerry DeLisle
jvdelisle@verizon.net
Mon Oct 9 03:13:00 GMT 2006
Tobias Burnus wrote:
> 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
>
Thanks for the test case. I have made this all part of pr29277. I have posted
a preliminary patch for the READ portion. If someone could test this on a
windows machine I would appreciate it. I am now attending to the WRITE part.
Regards
Jerry
More information about the Fortran
mailing list