SmartQuery /ВОПРОС → ПРИМЕР → ПОНЯТНЫЙ ОТВЕТ
Языки и платформы

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 не делает копию на другом носителе.

Документация