2013-09-06 2 views
0

Предположим, я хочу добавить строку в файл в Fortran. Используя последнюю версию (4.7) gfortran, я считаю, что это работает:`backspace` в gfortran (старый и новый)

program test 
    integer :: lun=10, i=0 

    open(FILE='test.dat', UNIT=lun) 

    do 
    read(lun, *, END=20) i 
    print *, i 
    end do 
20 backspace(lun) 

    write(lun, *), i+1 
end program test 

В gfortran 4.4 однако, перезаписывает последнюю строку. Чтобы добавить , я считаю, что нужно использовать

20 continue 

вместо backspace.

Что с этим связано? Как бы вы справились с этим в реальной программе?

+1

похоже на просто неправильное поведение в 4.4. за стандарт ", если предыдущая запись является записью конечного файла, файл становится позиционированным до записи конечного файла.". – agentp

+0

fwiw, старый g77 (3.4.6) ведет себя как ожидалось (не переписывая), а gfortran 4.1.2 перезаписывает. Оба работают правильно, используя open append (хотя g77 нуждается в доступе = вместо position =) – agentp

ответ

0
program test 
    integer :: lun=10, i=0,io 

    open(FILE='test.dat', UNIT=lun, POSITION="append") 

    backspace(lun,iostat=io) 

    if (io==0) then 
    read(lun,*) i 
    else 
    i = 0 
    end if 

    write(lun, *) i+1 

end program test 
Смежные вопросы