Вы можете достичь желаемого, используя inquire
, access=stream
и тег pos
в операторе чтения.Краткое 10-минутное упражнение дает следующее:
program foo
implicit none
integer fd, i, j, m, n
character, allocatable :: s(:)
character :: c
open(newunit=fd,file='foo.f90',access='stream',status='old', &
position='append')
inquire(fd, pos=n)
allocate(s(n))
m = 1
do i = n-1, 1, -1
read(fd, pos=i) c
s(m:m) = c
if (iachar(c) == 10) then
do j = m, 1, -1
write(*,'(A1)',advance='no') s(j)
end do
m = 1
else
m = m + 1
end if
end do
write(*,*)
do j = m-1, 1, -1
write(*,'(A1)',advance='no') s(j)
end do
write(*,*)
close(fd)
end program foo
Сохраните это в файл с именем foo.f90, скомпилируйте и запустите.Кто-то здесь может сделать его более элегантным.Отредактированная оригинальная версия: не нужно использовать секции массива для s(j)
.