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


Файлы и устройства ввода и вывода ( Files and Devices )



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

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

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

Количество байтов данных, занесенных в запись, должно быть меньше или равно длине записи. Неформатные операторы READ и WRITE передают одну запись. Форматные операторы READ и WRITE могут передавать более одной записи при использовании дескриптора формата слэш ( / ). Двоичные файлы в Fortran передают столько записей, сколько нужно для передачи требуемого количества байтов. При выводе, незавершенная форматная запись дополняется пробелами, а неформатная или двоичная ‑ нулями.

Логические устройства ( Logical Devices )

Каждый файл, внутренний или внешний, считается логическим устройством. Такое логическое устройство идентифицируется спецификатором устройства в параметре ( UNIT= ) операторов ввода-вывода. Спецификатором устройства в случае внутреннего файла является имя символьной переменной. Спецификатором устройства для внешних файлов является или число, которое указывается в операторе OPEN и задает номер подсоединяемого устройства ( или иначе номер открываемого канала), или номер так называемого предварительно подсоединенного устройства (которые не нужно явно подсоединять) или звездочка (*). Открытый канал закрывается или неявно при завершении выполнения программы или явно оператором CLOSE.

Канал не может быть присоединен одновременно более чем к одному файлу, а файл не может быть открыт более чем по одному каналу. Если оператором OPEN открывается уже открытый файл, то должно быть какое-нибудь отличие в параметрах этих операторов.

Номер канала указывается во всех операторах ввода-вывода за исключением:

· оператора PRINT, который является укороченной формой оператора WRITE с параметром UNIT= 6 или *;

· укороченного оператора READ, который является частным видом полного оператора READ с параметром UNIT= 5 или *;

· оператора INQUIRE с параметром FILE=, а не UNIT=.

 

Внешние файлы (External Files)

Номер канала для внешнего файла должен быть или целым выражением в диапазоне от –32767 до 32768 или звездочкой ( * ). Следующий пример показывает открытие по каналу 10 внешнего файла UNDAMP.DAT и запись данных в него:

 

OPEN(UNIT = 10, FILE = 'undamp.dat')

WRITE(10, '(A\)') ' Undamped Motion: '

 

Канал звездочка задает ввод с клавиатуры и вывод на экран монитора, например:

 

WRITE(*, '(1X, A\)') ' Вывод на экран'

 

Fortran имеет 4 предварительно открытых канала:

 

Номер канала Назначение
* Всегда клавиатура или экран
Сначала клавиатура или экран
Сначала клавиатура
Сначала экран

 

Канал ( * ) не может быть переназначен оператором OPEN другим устройствам, а такая попытка приведет к ошибке компиляции. Каналы 0, 5 и 6 могут упоминаться в операторе OPEN. При явном закрытии каналов 0, 5 или 6, они автоматически переназначаются на свои стандартные устройства.

В следующем примере, сначала выполняется вывод по предварительно открытому каналу 6 (на экран), затем он пересоединяется к внешнему файлу и затем он снова пересоединяется к экрану:

 

REAL a, b

! Вывод на экран

WRITE(6, '('' This is unit 6'')')

! Пересоединение к файлу COSINES

OPEN(UNIT = 6, FILE = 'COSINES', STATUS = 'NEW')

DO a = 0.1, 6.3, 0.1

b = COS(a)

WRITE(6, 100) a, b! Запись в файл COSINES

FORMAT(F3.1, F5.2)

END DO

CLOSE (6)! Закрытие файла

! Вывод опять на экран

WRITE(6, ' ('' Cosines completed'')')

END

 

Внутренние файлы ( Internal Files )

При работе с внутренними файлами, вместо номера канала используется имя символьной переменной или символьного массива. Существует два типа внутренний файлов:

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

· внутренний файл, который является символьным массивом, структурой символьного типа или несимвольным массивом состоит из последовательности элементов, каждый из которых ‑ запись. Порядок следования записей определяется порядком следования элементов внутреннего файла (массива или структуры), а длина записи равна длине элемента.

 

Необходимо соблюдать следующие правила при работе с внутренними файлами:

· использовать только последовательный форматный ввод-вывод, в том числе управляемый списком, который также считается последовательным форматным. Нельзя применять ввод-вывод по именованным спискам ( NAMELIST );

· если символьная переменная является размещаемым массивом или его частью, массив должен быть размещен до его использования;

· использовать только операторы READ и WRITE. Нельзя использовать операторы OPEN, CLOSE, REWIND, BACKSPACE и INQUIRE.

 

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

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

 

Пример (переменные x и fname – внутренние файлы):

 

CHARACTER(10) str

INTEGER n1, n2, n3

CHARACTER(14) fname

INTEGER i

str = " 1 2 3"

! Управляемый списком READ

! Значения переменных равны: n1 = 1, n2 = 2, n3 = 3

READ(str, *) n1, n2, n3

i = 4

! Форматный WRITE

! Значение переменной fname = 'FM004.DAT'

WRITE (fname, 200) i

FORMAT ('FM', I3.3, '.DAT')


Организация файлов ( Structure of Files )

Обзор

DVF поддерживает два метода доступа к файлам: последовательный ( sequential ) и прямой ( direct ), и три типа структур файлов: форматные ( formatted ), неформатные ( unformatted ) и двоичные ( binary ). Таким образом, имеется шесть типов файлов:

 

· Последовательный форматный

· Прямой форматный

· Последовательный неформатный

· Прямой неформатный

· Последовательный двоичный

· Прямой двоичный

 

Форматные файлы ( Formatted Files )

Создание форматного файла производится путем его открытия с параметром FORM= 'FORMATTED' или опусканием параметра FORM при открытии последовательного файла.

Записи форматного файла хранятся в виде ASCII символов. Каждая запись заканчивается двумя ASCII символами: перевода каретки (carriage return ‑ CR) и перевода строки (line feed ‑ LF). Если требуется, чтобы данные могли быть просмотрены человеком (например, в текстовом редакторе) нужно использовать форматные файлы. Данные в неформатных и двоичных файлах представляются шестнадцатеричными символами.

 

Неформатные файлы ( Unformatted Files )

Создание неформатного файла производится путем его открытия с параметром FORM= 'UNFORMATTED' или опусканием параметра FORM при открытии файла прямого доступа.

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


Поделиться:



Популярное:

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


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