Учебники

Фортран — Файл ввода-вывода

Fortran позволяет вам читать данные и записывать данные в файлы.

В последней главе вы увидели, как читать данные и записывать данные в терминал. В этой главе вы изучите функции ввода и вывода файлов, предоставляемые Fortran.

Вы можете читать и писать в один или несколько файлов. Операторы OPEN, WRITE, READ и CLOSE позволяют вам достичь этого.

Открытие и закрытие файлов

Перед использованием файла вы должны открыть файл. Команда open используется для открытия файлов для чтения или записи. Самая простая форма команды —

open (unit = number, file = "name").

Тем не менее, открытое заявление может иметь общую форму —

open (list-of-specifiers)

В следующей таблице описаны наиболее часто используемые спецификаторы.

Sr.No Спецификатор и описание
1

[UNIT =] U

Номер устройства u может быть любым числом в диапазоне 9-99, и это указывает на файл, вы можете выбрать любое число, но каждый открытый файл в программе должен иметь уникальный номер

2

IOSTAT = IOS

Это идентификатор состояния ввода / вывода и должен быть целочисленной переменной. Если оператор open успешен, то возвращаемое значение ios равно нулю, иначе ненулевое значение.

3

ERR = ошибка

Это метка, к которой переходит элемент управления в случае любой ошибки.

4

ФАЙЛ = имя

Имя файла, строка символов.

5

STATUS = STA

Показывает предыдущий статус файла. Символьная строка и может иметь одно из трех значений NEW, OLD или SCRATCH. Скретч-файл создается и удаляется при закрытии или завершении программы.

6

ДОСТУП = акк

Это режим доступа к файлу. Может иметь одно из двух значений, SEQUENTIAL или DIRECT. По умолчанию установлено значение SEQUENTIAL.

7

ФОРМА = ФРМ

Это дает статус форматирования файла. Может иметь одно из двух значений: FORMATTED или UNFORMATTED. По умолчанию установлено значение UNFORMATTED

8

RECL = RL

Он определяет длину каждой записи в файле прямого доступа.

[UNIT =] U

Номер устройства u может быть любым числом в диапазоне 9-99, и это указывает на файл, вы можете выбрать любое число, но каждый открытый файл в программе должен иметь уникальный номер

IOSTAT = IOS

Это идентификатор состояния ввода / вывода и должен быть целочисленной переменной. Если оператор open успешен, то возвращаемое значение ios равно нулю, иначе ненулевое значение.

ERR = ошибка

Это метка, к которой переходит элемент управления в случае любой ошибки.

ФАЙЛ = имя

Имя файла, строка символов.

STATUS = STA

Показывает предыдущий статус файла. Символьная строка и может иметь одно из трех значений NEW, OLD или SCRATCH. Скретч-файл создается и удаляется при закрытии или завершении программы.

ДОСТУП = акк

Это режим доступа к файлу. Может иметь одно из двух значений, SEQUENTIAL или DIRECT. По умолчанию установлено значение SEQUENTIAL.

ФОРМА = ФРМ

Это дает статус форматирования файла. Может иметь одно из двух значений: FORMATTED или UNFORMATTED. По умолчанию установлено значение UNFORMATTED

RECL = RL

Он определяет длину каждой записи в файле прямого доступа.

После того, как файл был открыт, к нему обращаются операторы чтения и записи. После этого он должен быть закрыт с помощью оператора закрытия .

Оператор close имеет следующий синтаксис:

close ([UNIT = ]u[,IOSTAT = ios,ERR = err,STATUS = sta])

Обратите внимание, что параметры в скобках не являются обязательными.

пример

Этот пример демонстрирует открытие нового файла для записи некоторых данных в файл.

program outputdata   
implicit none

   real, dimension(100) :: x, y  
   real, dimension(100) :: p, q
   integer :: i  
   
   ! data  
   do i=1,100  
      x(i) = i * 0.1 
      y(i) = sin(x(i)) * (1-cos(x(i)/3.0))  
   end do  
   
   ! output data into a file 
   open(1, file = 'data1.dat', status = 'new')  
   do i=1,100  
      write(1,*) x(i), y(i)   
   end do  
   
   close(1) 
   
end program outputdata

Когда приведенный выше код компилируется и выполняется, он создает файл data1.dat и записывает в него значения массива x и y. И затем закрывает файл.

Чтение и запись в файл

Операции чтения и записи соответственно используются для чтения и записи в файл соответственно.

У них есть следующий синтаксис —

read ([UNIT = ]u, [FMT = ]fmt, IOSTAT = ios, ERR = err, END = s)
write([UNIT = ]u, [FMT = ]fmt, IOSTAT = ios, ERR = err, END = s)

Большинство спецификаторов уже обсуждались в приведенной выше таблице.

Спецификатор END = s — это метка оператора, куда программа переходит, когда она достигает конца файла.

пример

Этот пример демонстрирует чтение и запись в файл.

В этой программе мы читаем из файла, который мы создали в последнем примере, data1.dat, и отображаем его на экране.

Live Demo

program outputdata   
implicit none   

   real, dimension(100) :: x, y  
   real, dimension(100) :: p, q
   integer :: i  
   
   ! data  
   do i = 1,100  
      x(i) = i * 0.1 
      y(i) = sin(x(i)) * (1-cos(x(i)/3.0))  
   end do  
   
   ! output data into a file 
   open(1, file = 'data1.dat', status='new')  
   do i = 1,100  
      write(1,*) x(i), y(i)   
   end do  
   close(1) 

   ! opening the file for reading
   open (2, file = 'data1.dat', status = 'old')

   do i = 1,100  
      read(2,*) p(i), q(i)
   end do 
   
   close(2)
   
   do i = 1,100  
      write(*,*) p(i), q(i)
   end do 
   
end program outputdata

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —