Fortran: запись чисел в файл с проверкой ошибок
Запись во внешний файл состоит из OPEN, WRITE и CLOSE. Это операторы ввода-вывода, а не обычные функции. Номер unit связывает операции с открытым файлом; NEWUNIT позволяет среде выполнения выбрать свободный номер вместо фиксированного 10.
Полная программа
program write_values
use iso_fortran_env, only: error_unit
implicit none
integer :: unit, ios, i
character(len=256) :: message
open(newunit=unit, file='values.txt', status='new', &
action='write', iostat=ios, iomsg=message)
if (ios /= 0) then
write(error_unit, '(a)') trim(message)
error stop 1
end if
do i = 1, 10
write(unit, '(f8.2)', iostat=ios, iomsg=message) real(i) * 2.0
if (ios /= 0) then
write(error_unit, '(a)') trim(message)
close(unit)
error stop 1
end if
end do
close(unit, iostat=ios, iomsg=message)
if (ios /= 0) then
write(error_unit, '(a)') trim(message)
error stop 1
end if
print '(a)', 'Written: values.txt'
end program write_valuesПри успешном выполнении values.txt содержит десять строк: 2.00, 4.00 и далее до 20.00, с выравниванием поля формата F8.2. Сообщение об успехе печатается только после успешного CLOSE. Имена program/end program совпадают; для строк использованы обычные кавычки.
Выберите политику существующего файла
- status="new" требует, чтобы файла ещё не было. Повторный запуск с тем же именем завершится ошибкой открытия и сохранит прежний результат.
- status="replace" намеренно заменяет существующий файл. Используйте его только когда перезапись действительно нужна.
- Для дозаписи к существующему текстовому файлу явно рассмотрите status="old", position="append" и action="write". Это другой сценарий, а не замена слова new в любой программе.
Что означает проверка ошибок
Ненулевой IOSTAT сигнализирует о проблеме операции; IOMSG содержит диагностическое описание. Возможны отказ доступа, отсутствующий каталог, нехватка места или сбой устройства. При ошибке после нескольких WRITE может остаться частичный файл: наличие values.txt само по себе не означает, что результат полный.
Сохраните программу в write_values.f90 и соберите компилятором, поддерживающим используемые возможности Fortran 2008. Проверяйте сначала в отдельной рабочей папке, где допустимо создать values.txt. Для важного результата отдельно нужна проверяемая процедура резервного копирования; CLOSE не делает копию на другом носителе.