Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Структура прямого двоичного файла



Записи прямого двоичного файла хранятся как ряд двоичных чисел, доступных в любом порядке. Записи имеют одинаковую длину, задаваемую параметром RECL= оператора OPEN. Запись может быть заполнена частично, тогда остальная часть автоматически заполняется двоичными нулями.

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

 

Рис. 3.H. Структура прямого двоичного файла

 

Пример Создание прямого двоичного файла. Результирующий файл показан на Рис. 3.H

 

OPEN(3, FILE='BDIR', RECL=10, FORM='BINARY',

* ACCESS='DIRECT')

WRITE(3, REC=1) 'abcdefghijklmno'

WRITE(3) 4, 5

WRITE(3, REC=4) 'pq'

CLOSE(3)

END

 

Устройства ввода и вывода

Стандартными устройствами ввода-вывода в DVF являются клавиатура (при вводе) и экран (при выводе). Для того, чтобы выполнить ввод или вывод на другие физические устройства, необходимо указать имя устройства, как имя файла.

Имена некоторых УВВ определяются в операционной системе, а имена других ‑ в DVF. В Табл. 3.A приведены имена УВВ. Если любое из этих имен указано с расширением, например, LINE1.TXT, то оно будет считаться именем файла, а не УВВ.

Табл. 3.A

Стандартные имена УВВ

Имя Описание
CON Экран (стандартный вывод)
PRN Принтер
COM1 Последовательный порт 1
COM2 Последовательный порт 2
COM3 Последовательный порт 3
COM4 Последовательный порт 4
LPT1 Параллельный порт 1
LPT2 Параллельный порт 2
LPT3 Параллельный порт 3
LPT4 Параллельный порт 4
NUL Устройство NULL. Игнорирует вывод и ввод
AUX Последовательный порт 1
LINE1 Последовательный порт 1
USER1 Стандартный вывод
ERR1 Стандартная ошибка

 

Пример

 

OPEN(UNIT = 4, FILE = 'PRN')

OPEN(UNIT = 7, FILE = 'COM2', ERR = 100)

 

Операторы ввода-вывода ( Input and Output Statements )

Обзор

К операторам, предназначенным для организации ввода и вывода данных из/во внешние устройства ввода-вывода, относятся:

 

Оператор Назначение
BACKSPACE Устанавливает файл в начало предыдущей записи
CLOSE Освобождает ранее подключенное УВВ
ENDFILE Выводит в файл запись конец файла
INQUIRE Проводит опрос свойств УВВ или файлов
LOCKING Блокирует файл или запись прямого доступа
OPEN Связывает канал с внешним УВВ или файлом
PRINT Выводит (печатает) данные в файл или на экран
READ Передает данные из файла элементу списка ввода
REWIND Устанавливает файл в начало
WRITE Передает данные из элемента списка вывода в файл

Оператор BACKSPACE

BACKSPACE { unitspec |( [UNIT=] unitspec

[, ERR=errlabel] [, IOSTAT=iocheck ]] ) }

где

· параметры UNIT, ERR и IOSTAT являются ключевыми словами.

· unitspec - целое выражение, которое задает номер канала. Если канал не открыт, генерируется ошибка выполнения программы. Если UNIT= опущено, unitspec должен быть первым параметром;

· errlabel - метка исполняемого оператора в той же программной единице, которому передается управление в случае возникновения ошибки ВВ;

· iocheck - целая переменная, элемент массива или элемент, которому присваивается код завершения операции ВВ (0 - при отсутствии ошибки и номер ошибки, если она произошла);

· параметры UNIT, ERR и IOSTAT являются ключевыми словами.

 

Оператор BACKSPACE устанавливает файл в начало предыдущей записи, т.е. возвращается ровно на одну запись назад, исключая случаи, указанные в следующей таблице.

 

 

Случай Результат
Предыдущая запись отсутствует Действие отсутствует
Предыдущей является запись конец файла Файл устанавливается перед записью конец файла
Файл установлен внутри некоторой записи файл устанавливается в начало этой записи

 

Если параметр оператора BACKSPACE является выражением, которое вызывает функции, эти функции не должны содержать операторы ВВ и встроенную функцию EOF.

При отсутствии обоих параметров ERR=errlabel и IOSTAT=iocheck, возникновение любой ошибки ВВ приводит к прерыванию выполнения программы.

 

Пример

BACKSPACE 5

BACKSPACE (5)

BACKSPACE lunit

BACKSPACE (UNIT = lunit, ERR = 30, IOSTAT = ios)

 

Оператор CLOSE

 

CLOSE ( [UNIT=] unitspec [, ERR=errlabel] [, IOSTAT=iocheck] [, STATUS=status] )

где

· параметры UNIT, ERR, IOSTAT и STATUS являются ключевыми словами.

· unitspec - целое выражение, которое задает номер канала. Если канал не открыт, генерируется ошибка выполнения программы. Если UNIT= опущено, unitspec должен быть первым параметром;

· errlabel - метка исполняемого оператора в той же программной единице, которому передается управление в случае возникновения ошибки ВВ;

· iocheck - целая переменная, элемент массива или элемент, которому присваивается код завершения операции ВВ (0 - при отсутствии ошибки и номер ошибки, если она произошла);

· status - символьное выражение приводимое к строкам 'KEEP' или 'DELETE'. Файлы, открытые с атрибутом " SCRATCH" (рабочие или временные) имеют по умолчанию статус 'DELETE'. Задание STATUS='KEEP' таких файлов приводит к ошибке выполнения программы. Для всех остальных файлов принимается по умолчанию STATUS='KEEP'.

 

Оператор CLOSE отсоединяет (закрывает) канал от УВВ. Не обязательно явно закрывать файлы, поскольку при нормальном завершении программы происходит закрытие каждого файла в соответствии с его статусом.

Закрытие канала 0 автоматически пересоединяет его к клавиатуре и экрану, а закрытие каналов 5 и 6 пересоединяет их к клавиатуре и экрану, соответственно.

Попытка закрытия канала звездочка (*) приводит к ошибке компиляции. Если параметр оператора CLOSE является выражением, которое вызывает функции, эти функции не должны содержать операторы ВВ и встроенную функцию EOF.

 

Пример

CLOSE (7, STATUS = 'DELETE')

 

Оператор ENDFILE

 

ENDFILE { unitspec | ( [UNIT=] unitspec

[, ERR=errlabel] [, IOSTAT=iocheck] ) }

где

· параметры UNIT, ERR и IOSTAT являются ключевыми словами.

· unitspec - целое выражение, которое задает номер канала. Если канал unitspec не был открыт, генерируется ошибка выполнения программы. Если ключевое слово UNIT= опущено, unitspec должен быть первым параметром, иначе параметры могут идти в любом порядке;

· errlabel - метка исполняемого оператора, расположенного в той же программной единице, на который передается управление в случае возникновения ошибки;

· iocheck - переменная, элемент массива или структуры целого типа, которые будут содержать код завершения выполнения оператора ENDFILE (0 при нормальном завершении или код ошибки, в случае ее возникновения).

 

Оператор ENDFILE выводит запись конец файла по указанному каналу и позиционирует файл после этой записи. Дальнейший вывод данных по этому каналу невозможен до тех пор, пока не выполнены операторы BACKSPACE или REWIND.

Если ENDFILE применен к файлу прямого доступа, все записи в файле после записи конец файла теряются.

Если любой параметр оператора ENDFILE является выражением с вызовом функций, они не должны содержать операторов ВВ и встроенной функции EOF.

 

Пример

 

WRITE (6, *) x

ENDFILE 6

REWIND 6

READ (6, *) y

 

Оператор INQUIRE

 

INQUIRE ( { [UNIT=] unitspec | FILE=file } [, ACCESS=access]

[, BINARY=binary] [, BLANK=blank] [, BLOCKSIZE=blocksize]

[, DIRECT=direct] [, ERR=errlabel] [, EXIST=exist]

[, FORM=form] [, FORMATTED=formatted] [, IOSTAT=iocheck]

[, MODE=mode] [, NAME=name] [, NAMED=named]

[, NEXTREC=nextrec] [, NUMBER=num] [, OPENED=opened]

[, RECL=recl] [, SEQUENTIAL=seq] [, SHARE=share]

[, UNFORMATTED=unformatted] )

где

· параметры, набранные заглавными буквами являются ключевыми словами;

· unitspec - звездочка (в этом случае нельзя использовать параметр NUMBER= ) или целое выражение, которое задает номер канала. Если ключевое слово UNIT= опущено, unitspec должен быть первым параметром, иначе параметры могут идти в любом порядке. Одновременно может быть указан или параметр UNIT (при запросе свойств канала) или FILE (при запросе свойств файла);

· file - символьное выражение, которое интерпретируется как имя файла;

· access - переменная, элемент массива или структуры символьного типа. Возвращает значения 'SEQUENTIAL' или 'DIRECT' в зависимости от способа доступа к УВВ или файлу. Способ доступа неопределен, если запрашивается неприсоединенное устройство (неоткрытый канал);

· binary - переменная, элемент массива или структуры символьного типа. Возвращает 'YES' если УВВ или файл ‑ двоичные и 'NO' или 'UNKNOWN' в других случаях;

· blank - переменная, элемент массива или структуры символьного типа. Возвращает 'NULL' если установлен описатель BN и 'ZERO' если BZ;

· blocksize - переменная, элемент массива или структуры целого типа. Возвращает размер буфера ВВ если УВВ или файл уже открыты, иначе параметр неопределен;

· direct - переменная, элемент массива или структуры символьного типа. Возвращает 'YES' если установлен прямой способ доступа к УВВ или файлу, иначе ‑ 'NO' или 'UNKNOWN';

· errlabel - метка исполняемого оператора, расположенного в той же программной единице, на который передается управление в случае возникновения ошибки;

· exist - переменная, элемент массива или структуры логического типа. Возвращает.TRUE. если устройство или файл существуют, иначе ‑.FALSE. ;

· form - переменная или элемент массива символьного типа. Возвращает 'FORMATTED' (форматный) 'UNFORMATTED' (бесформатный) или 'BINARY' (двоичный) в зависимости от способа доступа к УВВ или файлу;

· formatted - переменная, элемент массива или структуры символьного типа. Возвращает 'YES' если установлен форматный доступ к УВВ или файлу, иначе 'NO' или 'UNKNOWN';

· iocheck - переменная, элемент массива или структуры целого типа, которые будут содержать код завершения выполнения оператора ENDFILE (0 при нормальном завершении или код ошибки, в случае ее возникновения);

· mode - переменная, элемент массива или структуры символьного типа. Возвращает значение установленной оператором OPEN моды (назначения) УВВ или файла: 'READ', 'WRITE' или 'READWRITE'. Значение неопределено при опросе УВВ и неприсоединенном файле;

· name - переменная, элемент массива или структуры символьного типа. Возвращает имя файла, подсоединенного к каналу. Значение неопределено при неприсоединенном файле;

· named - переменная, элемент массива или структуры логического типа. Возвращает.FALSE. если файл неприсоединен или является временным, иначе ‑.TRUE. ;

· nextrec - переменная, элемент массива или структуры целого типа. Возвращает номер следующей записи для файлов прямого доступа;

· num - переменная, элемент массива или структуры целого типа. При опросе файла возвращает номер канала;

· opened - переменная, элемент массива или структуры логического типа. При опросе канала возвращает.TRUE. если файл подсоединен, иначе ‑.FALSE.. При опросе файла возвращает.TRUE. если файл уже присоединен, иначе ‑ .FALSE.;

· recl - переменная, элемент массива или структуры целого типа. Возвращает длину (в байтах) записи файла прямого доступа. Если файл присоединен к неформатному УВВ, то это значение зависит от процессора (для DVF тоже в байтах);

· seq - переменная, элемент массива или структуры символьного типа. Возвращает 'YES' если УВВ или файл имеют последовательный доступ, иначе ‑ 'NO' или 'UNKNOWN';

· share - переменная, элемент массива или структуры символьного типа. Возвращает статус совместного использования, установленный в операторе OPEN: 'COMPAT', 'DENYRW', 'DENYWR', 'DENYRD' или 'DENYNONE';

· unformatted - переменная, элемент массива или структуры символьного типа. Возвращает 'YES' если установлен неформатный доступ к УВВ или файлу, иначе ‑ 'NO' или 'UNKNOWN'.

 

Оператор INQUIRE позволяет выяснить свойства УВВ или файла. Заметим, что невозможно узнать свойства неоткрытого файла или отличить заданные свойства от установленных по умолчанию.

Если любой параметр оператора INQUIRE является выражением с вызовом функций, они не должны содержать операторов ВВ и встроенной функции EOF.

 

Пример

 

* Программа запрашивает имя файла, а оператор INQUIRE определяет существует этот файл или нет. Если не существует, имя запрашивается снова.

CHARACTER*12 fname

LOGICAL exists

100 WRITE (*, '(1X, A\)') 'Введите имя файла: '

READ (*, '(A)') fname

INQUIRE (FILE = fname, EXIST = exists)

IF (.NOT. exists) THEN

WRITE (*, '(2A/)') ' > > Не найден файл ', fname

GOTO 100

END IF

END

Оператор LOCKING

 

LOCKING ( [UNIT=] unitspec

[, ERR=errlabel] [, IOSTAT=iocheck]

[, LOCKMODE=lockmode] [, REC=rec] [, RECORDS=recnum])

где

· параметры, набранные заглавными буквами являются ключевыми словами;

· unitspec - целое выражение, которое задает номер канала. Соответствующий файл должен иметь прямой доступ. Если ключевое слово UNIT= опущено, unitspec должен быть первым параметром, иначе параметры могут идти в любом порядке;

· errlabel - метка исполняемого оператора, расположенного в той же программной единице, на который передается управление в случае возникновения ошибки;

· iocheck - переменная, элемент массива или структуры целого типа, которые будут содержать код завершения выполнения оператора ENDFILE (0 при нормальном завершении или код ошибки, в случае ее возникновения).

· lockmode - символьное выражение со значением:

¨ 'NBLCK' ‑ закрывает область для чтения и записи. Если любая из записей уже закрыта, возникает ошибка выполнения программы. Действует по умолчанию.

¨ 'LOCK' ‑ закрывает область для чтения и записи. Ожидает, пока вся область станет доступной.

¨ 'NBRLCK' ‑ закрывает область для чтения. По чтению аналогичен 'NBLCK'.

¨ 'RLCK' ‑ закрывает область для чтения. По чтению аналогичен 'LOCK'.

'UNLCK' ‑ открывает область.

· rec - целое выражение, которое является номером первой записи в группе открываемых или закрываемых записей. Если опущено, то подразумевается следующая запись.

· recnum - целое выражение, которое устанавливает количество блокируемых записей. По умолчанию равно 1.

 

Оператор LOCKING блокирует файл или записи файла прямого доступа для использования другими пользователями сети. Оператор LOCKING не действует в версиях MS-DOS до v.3.0.

Если любой параметр оператора LOCKING является выражением с вызовом функций, они не должны содержать операторов ВВ и встроенной функции EOF.

Оператор OPEN

 

OPEN ([UNIT=]unitspec [, ACCESS=access] [, BLANK=blanks]

[, BLOCKSIZE=blocksize] [, ERR=errlabel] [, FILE=file]

[, FORM=form] [, IOSTAT=iocheck] [, MODE=mode]

[, RECL=recl] [, SHARE=share] [, STATUS=status])

где

· параметры, набранные заглавными буквами являются ключевыми словами;

· unitspec - звездочка (в этом случае нельзя использовать параметр NUMBER=) или целое выражение, которое задает номер канала. Если ключевое слово UNIT= опущено, unitspec должен быть первым параметром, иначе параметры могут идти в любом порядке. Одновременно может быть указан или параметр UNIT (при запросе свойств канала) или FILE (при запросе свойств файла);

· access - символьное выражение со значением 'APPEND', 'DIRECT' или 'SEQUENTIAL' (по умолчанию).

· blanks - символьное выражение со значением 'NULL' или 'ZERO'.

¨ 'NULL' (по умолчанию) ‑ игнорирование пробелов (тоже, что дескриптор BN; действует пока не указан явно дескриптор BZ в операторе READ).

¨ 'ZERO' ‑ обрабатывает пробелы как нули (тоже, что дескриптор BZ; действует пока не указан явно дескриптор BN в операторе READ).

· blocksize - целое выражение, определяющее размер буфера (в байтах) для УВВ.

· errlabel - метка исполняемого оператора, расположенного в той же программной единице, на который передается управление в случае возникновения ошибки;

· file - символьное выражение. Если параметр FILE= опущен, компилятор образует временный файл. Если задан пробелом (FILE=' '), выполняются следующие действия:

¨ Программа считывает имена файлов из списка аргументов (если имеется) командной строки. Если соответствующий аргумент является пустой строкой (''), выводится запрос на имя файла. Имена файлов в командной строке считываются в порядке следования операторов OPEN, у которых опущен параметр FILE.

¨ Если имеется больше операторов OPEN с параметром FILE=' ', выводится соответствующее количество запросов на имена файлов.

Если имя файла задано как 'USER' или 'CON', производится ввод и вывод с консоли.

· form - символьное выражение со значением 'FORMATTED', 'UNFORMATTED' или 'BINARY'. По умолчанию приняты значения 'FORMATTED' для последовательного доступа и 'UNFORMATTED' ‑ для прямого.

· iocheck - переменная, элемент массива или структуры целого типа, которые будут содержать код завершения выполнения оператора ENDFILE (0 при нормальном завершении, отрицательное значение при обнаружении записи конец файла или код ошибки, в случае ее возникновения);

· mode - символьное выражение со значением 'READ' (файл только для чтения), 'WRITE' (файл только для записи) или 'READWRITE'.

· recl - целое выражение, которое определяет длину записи для файлов прямого доступа.

· share - символьное выражение, которое определяет статус совместного использования файла. Разрешены значения:

¨ 'DENYRW' - запрет на чтение/запись для других;

¨ 'DENYWR' - запрет на запись для других;

¨ 'DENYRD' - запрет на чтение для других;

¨ 'DENYNONE' - разрешение на чтение/запись для других;

· status - символьное выражение со значениями 'OLD', 'NEW', 'UNKNOWN' (по умолчанию) или 'SCRATCH'.

 

Оператор OPEN связывает (открывает) канал с УВВ. Открытие файла по каналу * не оказывает никакого влияния, т.к. канал * постоянно связан с клавиатурой и экраном. Однако, можно использовать OPEN для открытия других предварительно открытых каналов (0, 5 и 6).

Подключение уже открытого канала к другому файлу вызывает автоматическое отключение (закрытие) первого файла. Но открытие нескольких каналов с одним файлом вызовет ошибку.

Первая операция READ или WRITE для не открытого явно канала приводит к ситуации подключения файла с пустым именем (см. выше параметр file ).

Если любой параметр оператора OPEN является выражением с вызовом функций, они не должны содержать операторов ВВ и встроенной функции EOF.

Пример открытие канала с новым файлом

 

CHARACTER*64 filename

 

WRITE (*, '(A\)') ' Введите имя файла '

READ (*, '(A)') filename

 

C Открывает канал 7 для нового форматного

C (по умолчанию)файла последовательного доступа

 

OPEN (7, FILE = filename, ACCESS = 'SEQUENTIAL',

* STATUS = 'NEW')

 

Пример открытия канала 3 для существующего файла с именем DATA3.TXT:

 

OPEN (3, FILE = 'DATA3.TXT')

 

Оператор PRINT

 

PRINT { * | formatspec | namelist } [, iolist]

где

· параметры, набранные заглавными буквами являются ключевыми словами;

· formatspec - спецификатор формата;

· namelist - имя списка NAMELIST;

· iolist - СВВ (список выводимых объектов).

 

Оператор PRINT предназначен в основном для вывода данных на экран. Если formatspec есть *, такой вывод называется управляемый списком. Если приведено имя списка NAMELIST, СВВ должен отсутствовать.

Оператор PRINT выводит данные только по каналу *.

СВВ не может включать структурных переменных, а только элементы структур.

Если любой параметр оператора PRINT является выражением с вызовом функций, они не должны содержать операторов ВВ и встроенной функции EOF.

 

Пример

 

Следующие два оператора эквивалентны

 

PRINT '(A11)', 'Abbottsford'

WRITE (*, '(A11)') 'Abbottsford'

 

 

Оператор READ

 

READ { { formatspec, | nmlspec } |

( [UNIT=] unitspec [, [ {[FMT=] formatspec] | [NML=]nmlspec}]

[, END=endlabel] [, ERR=errlabel] [, IOSTAT=iocheck]

[, REC=rec])} [ iolist ]

где

· параметры, набранные заглавными буквами являются ключевыми словами;

· Если опущен параметр UNIT=, unitspec должен быть первым параметром. Если опущены FMT= или NML=, fmtspec или nmlspec должны быть вторыми параметрами. При использовании ключевых слов параметры могут располагаться в любом порядке;

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

· formatspec - спецификатор формата. Может быть меткой оператора FORMAT или собственно спецификатором формата. Параметр formatspec присутствует только при форматном вводе и не должен появляться при работе с неформатными файлами. Если опущены параметры UNIT=, END=, ERR= и REC=, а указаны только formatspec и iolist, такой оператор читает данные по каналу * (клавиатура);

· nmlspec - имя списка NAMELIST. Если присутствует этот параметр, СВВ должен отсутствовать. Ввод данных управляемый именованным списком может быть выполнен только из последовательных файлов;

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

· errlabel - метка исполняемого оператора в той же программной единице, на который передается управление если возникает ошибка ввода;

· iocheck - переменная, элемент массива или структуры целого типа, которые будут содержать код завершения выполнения оператора READ;

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

· iolist - СВВ (список вводимых объектов). В случае форматного ввода, СВВ не должен содержать структурных переменных, а только элементы структур.

 

Оператор READ предназначен для передачи данных из УВВ в элементы СВВ.

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

Если на момент выполнения оператора READ канал предварительно не был открыт явно, выполняется его открытие с параметрами (см. п.3.5.7):

 

OPEN (unitspec, FILE = ' ', STATUS = 'OLD',

+ ACCESS = 'SEQUENTIAL', FORM = form)

 

где form имеет значение 'FORMATTED' для форматных и 'UNFORMATTED' для неформатных операций считывания.

Если любой параметр оператора READ является выражением с вызовом функций, они не должны содержать операторов ВВ и встроенной функции EOF.

Оператор READ может искажать работу некоторых графических текстовых функций таких как SETTEXTWINDOW, которые меняют расположение курсора. В этих случаях следует вводить текст с клавиатуры через функцию GETCHARQQ, а выводить через функцию OUTTEXT.

 

Пример

 

DIMENSION ia(10, 20)

 

READ(3, 990) il, jl, ((ia(i, j), j = 1, jl), i = 1, il)

990 FORMAT(2I5/(8I5))

 

Оператор REWIND

 

REWIND { unitspec | ( [UNIT=]unitspec

[, ERR=errlabel ] [, IOSTAT=iocheck ] ) }

где

· параметры, набранные заглавными буквами являются ключевыми словами;

· Если опущен параметр UNIT=, unitspec должен быть первым параметром.;

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

· errlabel - метка исполняемого оператора в той же программной единице, на который передается управление если возникает ошибка ввода;

· iocheck - переменная, элемент массива или структуры целого типа, которые будут содержать код завершения выполнения оператора READ;

 

Оператор REWIND устанавливает файл в начало.

Если любой параметр оператора REWIND является выражением с вызовом функций, они не должны содержать операторов ВВ и встроенной функции EOF.

 

Пример

 

INTEGER int(80)

...

WRITE(7, '(80I1)') int! запись данных

...

REWIND 7! перемотка файла

...

READ(7, '(80I1)') int! считывание данных

 

Оператор WRITE

 

WRITE ( [UNIT=] unitspec [, [ { [ FMT=] formatspec] |

[ NML=] nmlspec } ] [, ERR=errlabel ]

[, IOSTAT=iocheck ] [, REC=rec ] ) [ iolist ]

где

· параметры, набранные заглавными буквами являются ключевыми словами;

· Если опущен параметр UNIT=, unitspec должен быть первым параметром. Если опущены FMT= или NML=, fmtspec или nmlspec должны быть вторыми параметрами. При использовании ключевых слов параметры могут располагаться в любом порядке;

· unitspec - целое выражение, которое обозначает номер канала; символьная переменная (подстрока, переменная, массив или элемент массива, элемент структуры) или несимвольный массив в случае считывания из внутреннего файла;

· formatspec - спецификатор формата. Может быть меткой оператора FORMAT или собственно спецификатором формата. Параметр formatspec присутствует только при форматном выводе и не должен появляться при работе с неформатными файлами. Если опущены параметры UNIT=, END=, ERR= и REC=, а указаны только formatspec и iolist, такой оператор читает данные по каналу * (клавиатура);

· nmlspec - имя списка NAMELIST. Если присутствует этот параметр, СВВ должен отсутствовать. Вывод данных управляемый именованным списком может быть выполнен только из последовательных файлов;

· errlabel - метка исполняемого оператора в той же программной единице, на который передается управление если возникает ошибка вывода;

· iocheck - переменная, элемент массива или структуры целого типа, которые будут содержать код завершения выполнения оператора WRITE;

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

· iolist - СВВ (список выводимых объектов). В случае форматного вывода, СВВ не должен содержать структурных переменных, а только элементы структур.

 

Оператор WRITE предназначен для передачи данных из элементов СВВ в УВВ. При выводе в последовательные файлы, теряются все записи за вновь записанной.

Если канал не был открыт до появления оператора WRITE, он открывается неявно с параметрами:

 

OPEN(unitspec, FILE = ' ', STATUS = 'UNKNOWN',

* ACCESS = 'SEQUENTIAL', FORM = form)

 

где form имеет значение 'FORMATTED' для форматных и 'UNFORMATTED' для неформатных операций записи.

Если любой параметр оператора WRITE является выражением с вызовом функций, они не должны содержать операторов ВВ и встроенной функции EOF.

 

Пример

 

WRITE(*, 10) (n, SQRT(FLOAT(n)),

* FLOAT(n)**(1.0/3.0), n = 1, 100)

10 FORMAT (I5, F8.4, F8.5)

 

Оператор FORMAT

FORMAT ( [editlist] )

где

editlist - список дескрипторов преобразования (формата).

 

Оператор FORMAT Устанавливает формат, в соответствии с которым будут вводиться или выводиться данные. Оператор FORMAT должен иметь метку.

Некорректный список формата может вызывать ошибки как компиляции, так и выполнения программы.

 

Пример

 

10 FORMAT ('The final size is ', E12.6)

 

3.7. Повторяемые дескрипторы преобразования ( Repeatable Edit Descriptors )

Обзор

Для редактирования данных при вводе и выводе используются следующие повторяемые (т.к. непосредственно перед ними может стоять коэффициент повторения) дескрипторы (или дескрипторы данных):

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-04-09; Просмотров: 722; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.179 с.)
Главная | Случайная страница | Обратная связь