Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GRIGOREV.DOC
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
608 Кб
Скачать
☆

2.14. Операторные функции

Операторная функция записывается в виде:

имя(список параметров)=выражение

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

2.15. Внешние файлы

Для обработки внешних файлов в языке FORTRAN существуют операторы:

OPEN - открытие файла;

CLOSE - закрытие файла;

READ - чтение из файла;

WRITE - запись в файл;

INQUIRE - опрос файла;

BACKSPACE - переход к предыдущей записи;

REWIND - переход в начало файла;

ENDFILE - запись признака конца файла

и встроенная функция EOF.

Синтаксис оператора OPEN таков:

OPEN([UNIT=]устройство [,FILE=имя файла] [,MODE=режим]

[,ACCESS=способ доступа] [,STATUS=статус файла]

[,FORM=тип записей] [,RECL=длина записи]

[,BLANK=интерпретация пробелов]

[,BLOCKSIZE=размер буфера][,ERR=метка]

[,IOSTAT=код ошибки])

устройство- целая константа от -32767 до 32767, или целое выражение, или *. Задает номер устройства, к которому присоединяется файл. Устройство * всегда связано с клавиатурой и экраном, его переопределить нельзя. Устройство 0 по умолчанию связано с клавиатурой и экраном, 5 - с клавиатурой, 6 - с экраном, но эти устройства можно использовать и для других целей;

имя файла - символьное выражение, можно задать ‘’, тогда программа во время выполнения самостоятельно попросит ввести имя файла;

режим - ‘READ’, ‘WRITE’ или ‘READWRITE’ (по умолчанию);

способ доступа - ‘DIRECT’ или ‘SEQUENTIAL’ (по умолчанию);

статус файла - ‘OLD’, ‘NEW’, ‘UNKNOWN’ (по умолчанию) или ‘SCRATCH’. ‘SCRATH’ определяет временный файл, который будет уничтожен перед окончанием программы, такой файл не должен иметь имени;

тип записей - ‘FORMATTED’ (по умолчанию для ‘SEQUENTIAL’), ‘UNFORMATTED’ (по умолчанию для ‘DIRECT’) или ‘BINARY’;

длина записи - целое выражение, игнорируется для ‘SEQUENTIAL’;

интерпретация пробелов - ‘ZERO’ или ‘NULL’ (по умолчанию);

размер буфера - целое выражение, автоматически округляется до числа, кратного 512;

метка - метка оператора, которому передается управление при возникновении ошибки. Если этот параметр не задан, то ошибка открытия файла приводит к аварийному завершению программы;

код ошибки - целая переменная, которая возвращает 0, если операция завершилась успешно.

Оператор CLOSE записывается так:

CLOSE([UNIT=]устройство[,STATUS=статус файла]

[,ERR=метка] [,IOSTAT=код ошибки])

статус файла - ‘DELETE’ (по умолчанию для временных файлов) или ‘KEEP’(по умолчанию для всех остальных);

метка - метка оператора, которому передается управление при возникновении ошибки;

код ошибки - целая переменная, которая возвращает 0, если операция завершилась успешно.

Оператор READ для ввода из внешнего файла:

READ([UNIT=]устройство[,[FMT=]формат][,REC=номер записи]

[,END=метка-1][,ERR=метка-2][,IOSTAT=код ошибки])

номер записи - целое выражение, задается только для файлов прямого доступа, записи нумеруются начиная с 1;

код ошибки - возвращает отрицательное значение, если достигнут конец файла, положительное значение, если произошла ошибка чтения, и нулевое значение при успешном завершении операции.

Оператор WRITE записывается в виде :

WRITE([UNIT=]устройство [,[FMT=]формат] [,REC=номер записи]

[,ERR=метка] [,IOSTAT=код ошибки])

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

Оператор INQUIRE позволяет получить все характеристики файла или устройства. Он записывается в форме запроса об устройстве:

INQUIRE([UNIT=]устройство [,NAME=name] [,NUMBER=number]

[,EXIST=exist] [,NAMED=named] [,OPENED=opened] [,MODE=mode]

[,ACCESS=access] [,DIRECT=direct] [,SEQUENTIAL=sequential]

[,FORM=form] [,FORMATTED=formatted] [,UNFORMATTED=unformatted] [,BINARY=binary] [,RECL=recl]

[,BLANK=blank] [,BLOCKSIZE=blocksize] [,ERR=метка]

[,IOSTAT=код ошибки])

или в форме запроса о файле:

INQUIRE(FILE=имя файла ... )

Здесь параметры устройство, имя файла, метка и код ошибки имеют тот же смысл, что и раньше. Все остальные параметры - это переменные целого, логического и символьного типа, которые возвращают характеристики устройства или файла. Они возвращают следующие значения:

name - имя файла,

number - номер устройства,

exist - .TRUE. , если файл существует,

named - .TRUE. , если файл имеет имя,

opened - .TRUE. , если файл присоединен к устройству,

mode - ‘READ’, ‘WRITE’, ‘READWRITE’ или ‘UNKNOWN’

access - ‘SEQUENTIAL’, ‘DIRECT’ или ‘UNKNOWN’ ,

direct - ‘YES’, ‘NO’ или ‘UNKNOWN’ ,

sequential - ‘YES’, ‘NO’ или ‘UNKNOWN’ ,

form - ‘FORMATTED’, ‘UNFORMATTED’ или

‘UNKNOWN’ ,

formatted - ‘YES’, ‘NO’ или ‘UNKNOWN’ ,

unformatted - ‘YES’, ‘NO’ или ‘UNKNOWN’ ,

binary - ‘YES’, ‘NO’ или ‘UNKNOWN’ ,

recl - длина записи в байтах,

blank - ‘NULL’, ‘ZERO’ или ‘UNKNOWN’ ,

blocksize - размер буфера в байтах.

Оператор BACKSPACE устанавливает файловый указатель на начало предыдущей записи и может использоваться в двух формах :

BACKSPACE устройство

или

BACKSPACE([UNIT=]устройство[,ERR=метка]

[,IOSTAT=код ошибки])

Оператор REWIND устанавливает файловый указатель на начало файла:

REWIND устройство

или

REWIND([UNIT=]устройство[,ERR=метка][,IOSTAT=код ошибки])

Оператор ENDFILE записывает в файл признак конца файла, усекая таким образом файл:

ENDFILE устройство

или

ENDFILE([UNIT=]устройство[,ERR=метка][,IOSTAT=код ошибки])

Эти три оператора работают и для текстовых файлов.

В языке FORTRAN есть всего одна встроенная функция для обработки файлов

EOF(integer)

Функция возвращает истинное значение, если при вводе достигнут конец файла.

Из текстового файла можно читать числа в свободном формате, т.е. READ(номер устройства,*, ... ) ... Но если числа записаны в файле совершенно произвольным образом, то прочесть их не так просто, как в языках PASCAL и С, потому что каждое выполнение оператора READ - это чтение новой строки.

Кроме внешних устройств, которые определяются своим номером и связываются с каким-либо внешним файлом, можно использовать так называемые внутренние устройства - символьные переменные или массивы. Открывать и закрывать такие устройства не нужно, а операторы READ и WRITE записываются в виде

READ/WRITE(UNIT=имя,FMT=формат)список ввода/вывода

Внутренние устройства используются для преобразования числа в строку и наоборот. Если в качестве устройства используется символьный массив, то каждый элемент массива считается записью. Можно использовать подстроку в качестве внутреннего устройства.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]