Program main

Файлы

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

Файл это совокупность однотипных данных, имеющих имя и находящихся в памяти компьютера (внешней или в Фортране оперативной).

Файл состоит из записей. Запись – это единица обмена между программой и внешней памятью.

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

Количество компонент в файле заранее не оговаривается. Объём информации хранимой на внешнем носителе ограничивается ёмкостью ЗУ

 
 

 

 


указатель записи или компоненты файла конец файла

Действия с файлами состоят в чтении и записи. В любой момент времени программе доступен только один элемент файла, на который указывает УКАЗАТЕЛЬ ТЕКУЩЕЙ ПОЗИЦИИ ФАЙЛА (файловый указатель). Он определяет то место в файле, откуда (куда) производится чтение (запись) данных. Файловый указатель может находиться в начальной точке (перед первой записью), на текущей записи, в конечной точке (после последней записи – «конец файла»)

В Фортране различают два вида файлов: внешние и внутренние.

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

Пример

Real:: с=23.5

Integer n

Character(15) st

Write(st,*)с ! преобразование «число-строка»

Print*, st ! на экране: _____23.50000

Read(st,’(I5)’)n !преобразование строка-число

Print*,n !______________23

End

Внешний файл - это файл, который хранится на диске (последовательность записей на носителе) или внешние устройства (клавиатура, экран).

Чтобы работать с внешним файлом, его надо открыть (присоединить к устройству ввода/вывода). При открытии и создании файла указатель устанавливается на начало файла. Чтение и запись данных из файла автоматически вызывает перемещение указателя, т.е. указатель перемещается к началу следующей записи. При записи данных после последней компоненты ставится признак конца файла.

Для определения конца файла используется логическая функция Eof, которая возвращает значение .TRUE., если достигнут конец файла и .FALSE. в противном случае.

После окончания работы с файлом его надо закрыть.

В Фортране обращение к файлам данных происходит через канал (или устройство). Это логическое понятие, т.е. канал не устройство в обычном понимании, а воображаемый. Прежде чем выполнять ввод/вывод необходимо установить связь между физическим файлом и устройством, т.е. присоединить файл к устройству (каналу). Устройство обозначается идентификатором и это - звездочка * или целочисленное скалярное выражение. Для внешнего файла - это числовое значение от 1 до 32767 (2_147_483_640). Максимальное значение номера устройства зависит от конкретной реализации.

Каждому файлу соответствует свое логическое устройство. Одно физическое устройство может соответствовать разным логическим устройствам.

К устройствам ввода/вывода могут быть присоединены стандартные физические устройства (клавиатура и экран). Для экрана и клавиатуры в Фортране предусмотрены каналы с определенными номерами. В Фортран-программах существуют устройства с идентификаторами *, 0, 5, 6. Причем по умолчанию к устройствам *, 0, 5 присоединена клавиатура, а к устройствам *, 0, 6 – экран.

Write(n, m)<список вывода>

Real :: x=5.2

Write(*,’(f6.2)’) x

Write(0,’(f6.2)’) x

Write(6,’(f6.2)’) x

Все операторы это – вывод на экран.

Отсоединяются эти устройства автоматически после окончания работы программы. Эти устройства могут присоединяться к любому файлу.

Каждый внешний файл имеет имя. Оно должно удовлетворять правилам именования операционной системы: ‘c\users\A123\f1.txt’ – это спецификация внешнего файлаили, если это устройства - зарезервированные имена, например con, prn.

Внешний файл присоединяется к устройству ввода/вывода в результате выполнения оператора OPEN. Теперь доступ к внешнему файлу выполняется по номеру устройства, к которому он присоединен.

OPEN (unit=2, file = ‘c\users\A133\f1.txt’)

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

Файл состоит из записей. Под словом «запись» понимается «логическая запись». Записью называют единицу обмена данными между программой и внешней памятью.

Запишем в файлы по два целых числа различными способами:

program main

Integer::x=25, y=10

open(1, file='numbers1.txt')

write(1,*) x

write(1,*) y

close(1)

open(2, file='numbers2.txt')

write(2,*) x, y

close(2)

End

! В файле number1.txt будет:

25

10

!в файле number2.txt будет: 25 10

Запишем в файл 5 чисел, используя различные форматы при записи:

program main

integer i

open(10, file='number1.txt')

do i=1,5

write (10, '(I3\)') i

enddo

close(1)

end

В файле получим: __1__2__3__4__5

program main

integer i

open(10, file='number1.txt')

do i=1, 5

write (10, '(I3)') i

enddo

close(1)

end

В файле получим:

__1

__2

__3

__4

__5

Все записи в файле имеют одинаковый вид.

В Фортране различают следующие виды записей (в зависимости от представления данных):

· форматные – они состоят из символов кодовой таблицы. При вводе данные преобразуются из внешнего (символьного) представления - во внутреннее представление, а при выводе – из внутреннего во внешнее;

· неформатные (бесформатные), которые содержат данные во внутреннем машинном представлении, служат в основном для запоминания результатов в промежуточных вычислениях.

· конец файла.

Вид записи задается в операторе (теперь говорят в утверждении) open спецификаторами form=’formated’ или form=’unformated’

Запись ''конец файла” не содержит данных и ставится автоматически за последней записью файла.

Внешние файлы различают:

по способу доступа к данным;

по структуре (в зависимости от представления данных;)

По способу доступа (методу доступа) к данным:

· последовательный

· прямой

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

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

Прямой метод доступа позволяет читать записи в произвольном порядке (добраться до любой компоненты, не перебирая предыдущие). При такой организации компоненты файла (записи) имеют фиксированную длину (recl, которая указывается в операторе open)и свой уникальный номер (от 1 до n). Для доступа к данным надо указать только их номер. Их можно считывать и записывать в любом порядке.

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

· Форматными;

· Неформатными;

· Бинарными;

Вид записи задается в операторе Open. Записи форматного файла хранятся в виде символов таблицы ASCII и представляют собой последовательность символов. Числа хранятся в символьном представлении. Каждая запись заканчивается символом возврата каретки(CR) и перевод строки(LF). Форматные файлы могут создаваться, редактироваться и просматриваться в любом текстовом редакторе (поддерживающим кодировку). Если необходим визуальный просмотр данных, то следует использовать форматный файл.

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

Данные в бинарных файлах хранятся в двоичном представлении. Эти файлы – нетипичны для Фортрана (поддерживаются не во всех версиях), и мы их рассматривать не будем.

Таким образом, Фортран поддерживает два метода доступа и три структуры (форматные, неформатные, бинарные). Поэтому в Фортране существуют 6 разновидностей файлов. Мы будем рассматривать только типичные файлы:

· Форматные последовательные (текстовые);

· Неформатные последовательные;

· Неформатные прямые

Обычно в программе при организации ввода/вывода предполагается следующий порядок операторов:

Сначала оператором openфайл открывается (присоединяется к устройству, и определяются его свойства). Затем осуществляются действия по передаче данных (read, write). После окончания работы с файлом, его отсоединяют от устройства (закрывают файл - close).

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