Файлы типа Unformatted создаются программами и программными модулями, написанными на языке Fortran. Эти файлы являются бинарными (двоичными) и при этом имеют особую внутреннюю структуру, которая не позволяет считывать и записывать файлы такого типа напрямую (без учета этой структуры) из программ, написанных на других языках (например, C++).
В расчетном ядре и библиотеках пре- и постпроцессинга системы ФРУНД, написанных на языке Fortran, используется ряд файлов типа Unformatted:
rezr
— старый файл с результатами MBS-расчета, записывающийся из расчетного модуля (новый файл results.mbr
записывается из ядра fcore);rean
— файл с результатами анализа, записывается из библиотеки анализа fanaz (fcanaz) на этапе постпроцессинга;*.bnf
— файлы с графиками изменения величин, выбранных для замера при анализе;Файлы типа Unformatted отличаются от обычных бинарных файлов наличием определенной внутренней структуры. Содержимое таких файлов разделено на ряд последовательных блоков. Один блок — это набор данных, образующийся в Unformatted-файле при вызове очередной функции записи. При чтении содержимое Unformatted-файла также считывается целыми блоками (даже если функция чтения пытается считать меньший объем данных, чем тот, который содержится в считываемом блоке).
В следующей таблице приведена структура Unformatted-файла формата GFortran.
Раздел | Описание | Тип | Длина, байт | Значение | |||
---|---|---|---|---|---|---|---|
Список блоков | Блок 1 | Начальный символ блока | Открывающий символ блока | Число | 4 | 1) | |
Содержимое блока | Данные, хранящиеся в блоке | Массив байт | — | ||||
Конечный символ блока | Завершающий символ блока | Число | 4 | ||||
Блок 2 | Начальный символ блока | … | … | 4 | |||
Содержимое блока | … | … | — | ||||
Конечный символ блока | … | … | 4 | ||||
… | … | … | … | … | |||
Блок | Начальный символ блока | … | … | 4 | |||
Содержимое блока | … | … | — | ||||
Конечный символ блока | … | … | 4 |
Таким образом, длина Unformatted-файла формата GFortran равна:
,
где
Unformatted-файлы, создаваемые программами или программными модулями, скомпилированными с помощью компиляторов Microsoft Fortran PowerStation или Intel Fortran (с опцией Use PowerStation I/O Format, выставленной в Yes
; соответствующий ключ компилятора — /fpscomp:ioformat
), отличаются чуть более сложной структурой. В таких файлах содержимое каждого блока разбивается на ряд частей. Каждая часть содержит не более 128 байт данных.
В следующей таблице приведена структура Unformatted-файла формата PowerStation.
Раздел | Описание | Тип | Длина, байт | Значение | |||||
---|---|---|---|---|---|---|---|---|---|
Начальный символ | Открывающий символ файла | Символ | 1 | K (код2) 4B ) |
|||||
Список блоков | Блок 1 | Полная часть 1 | Начальный символ полной части | Открывающий символ полной части | Символ | 1 | код 81 |
||
Содержимое полной части | Данные, хранящиеся в полной части | Массив байт | 128 | — | |||||
Конечный символ полной части | Завершающий символ полной части | Символ | 1 | код 81 |
|||||
Полная часть 2 | … | … | … | … | 130 | … | |||
… | … | … | … | … | … | ||||
Полная часть | … | … | … | … | 130 | … | |||
Неполная часть (заключительная) | Начальный символ неполной части | Открывающий символ неполной части | Число | 1 | |||||
Содержимое неполной части | Данные, хранящиеся в неполной части | Массив байт | — | ||||||
Конечный символ неполной части | Завершающий символ неполной части | Число | 1 | ||||||
Блок 2 | Полная часть 1 | … | … | … | … | 130 | … | ||
Полная часть 2 | … | … | … | … | 130 | … | |||
… | … | … | … | … | … | ||||
Полная часть | … | … | … | … | 130 | … | |||
Неполная часть (заключительная) | … | … | … | … | … | ||||
… | … | … | … | … | |||||
Блок | Полная часть 1 | … | … | … | … | 130 | … | ||
Полная часть 2 | … | … | … | … | 130 | … | |||
… | … | … | … | … | … | ||||
Полная часть | … | … | … | … | 130 | … | |||
Неполная часть (заключительная) | … | … | … | … | … | ||||
Конечный символ | Закрывающий символ файла | Символ | 1 | , (код 82 ) |
Таким образом, длина Unformatted-файла формата PowerStation равна:
,
где
С точки зрения программиста, пишущего программный код на языке Fortran, работа с файлами типа Unformatted практически ничем не отличается от работы с другими типами файлов (например, текстовыми).
Функции по работе с файлами языка Fortran обеспечивают поддержку блочной структуры Unformatted-файлов. Корректная обработка особенностей, связанных с блоками, в программах, написанных на языках, отличных от языка Fortran (например, на языке C++), ложится на плечи программиста.
Открытие Unformatted-файла производится с помощью функции OPEN
:
OPEN(<Файловый идентификатор>, FILE = '<Имя файла>', FORM = 'UNFORMATTED', STATUS = 'OLD')
OPEN(<Файловый идентификатор>, FILE = '<Имя файла>', FORM = 'UNFORMATTED', STATUS = 'UNKNOWN')
Здесь
<Файловый идентификатор>
— файловая переменная или номер дескриптора,<Имя файла>
— наименование открываемого файла.Примечание.
При открытии для записи в Unformatted-файл формата PowerStation записывается открывающий символ.
Закрытие Unformatted-файла производится с помощью функции CLOSE
:
CLOSE(<Файловый идентификатор>)
Примечание.
При закрытии записываемого Unformatted-файла формата PowerStation в него записывается закрывающий символ.
Запись очередной порции данных в файл типа Unformatted производится с помощью функции WRITE
:
<Записываемая переменная 1>
, <Записываемая переменная 2>
, …, <Записываемая переменная N>
WRITE(<Файловый идентификатор>) <Записываемая переменная 1>, <Записываемая переменная 2>, ..., <Записываемая переменная N>
<Записываемый массив>
длиной <Длина записываемого массива>
WRITE(<Файловый идентификатор>) (<Записываемый массив>(Индекс), <Индекс> = 1, <Длина записываемого массива>)
Примечания.
Чтение данных из Unformatted-файла производится с помощью функции READ
:
<Считываемая переменная 1>
, <Считываемая переменная 2>
, …, <Считываемая переменная M>
READ(<Файловый идентификатор>) <Считываемая переменная 1>, <Считываемая переменная 2>, ..., <Считываемая переменная N>
<Считываемый массив>
длиной <Длина считываемого массива>
WRITE(<Файловый идентификатор>) (<Считываемый массив>(Индекс), <Индекс> = 1, <Длина считываемого массива>)
Примечания.
При чтении файла типа Unformatted можно использовать ряд функций, облегчающих навигацию по такому файлу. Они обеспечивают передвижение позиции курсора чтения с учетом блочной структуры файла типа Unformatted.
Возврат началу файла производится с помощью функции REWIND
:
REWIND(<Файловый идентификатор>)
Примечание.
При возврате к началу файла курсор чтения устанавливается на начало первого блока.
Возврат началу предыдущего блока (т.е. перемещение курсора чтения к началу предыдущего блока) производится с помощью функции BACKSPACE
:
BACKSPACE(<Файловый идентификатор>)
Существующие средства просмотра файлов с графиками (*.bnf
) величин, выбранных для замера при анализе, предполагают, что эти Unformatted-файлы имеют формат PowerStation. Таким образом, GFortran-версии библиотек ядра (прежде всего, libfviv.dll
) формируют файлы с графиками неверного формата. Поэтому после этапа анализа и генерации файлов с графиками требуется конвертация их в формат PowerStation.