Файл. Текстовый файл. Запись в файл. Чтение из файла. Типизированные файлы, страница 3

По завершении обработки файла программой он должен закрываться. После закрытия файла связанный с ним внешний файл обновляется, а файловая переменная может быть связана с другим внешним файлом. Закрывается файл с помощью процедуры С1оsе (stopka).

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

Для записи в текстовый файл или чтения из него можно использовать процедуры Write, Writeln, Read и Readln. В этом, случае в качестве первого параметра в этих процедурах указывается файловая переменная, например

read (stopka, a, x);

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

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

Оператор вывода допускает описание формата вывода. Если а является выражением целого, булевого или сорокового типа, то оператор

Writeln (a:n);

означает запись значения переменной а в правые позиции поля размером в п позиций. Значение n может быть отрицательным. В этом случае значение записывается в левые n позиций.

Если а имеет вещественный тип, должны быть описаны два поля формата:

Writeln ( a:10:3 );

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

В Паскале имеются две стандартных файловых переменных текстового типа — Input и Output. Стандартная файловая переменная Input представляет собой доступный только для чтения файл, связанный со стандартным файлом ввода операционной системы, которым обычно является клавиатура. Вторая стандартная файловая переменная Output связана с доступным только для записи файлом стандартного устройства вывода (дисплей).

При обращениях к стандартным функциям и процедурам ввода/вывода автоматически производится проверка на наличие ошибок. При обнаружении ошибки программа прекращает работу и выводит на экран сообщение. С помощью директив компилятора {$I+} и {$I-} автоматическую проверку ошибок ввода/вывода можно включить или выключить. Если автоматическая проверка отключена, ошибки ввода/вывода, возникающие при работе программы, не приводят к ее останову. Стандартная функция IOResult возвращает код ошибки. Нулевое значение кода ошибки означает нормальное завершение операции вода/вывода.

В таблице приведены процедуры и функции для работы с файлами различных типов.

Пример. Автоматическое преобразование

Предположим, у нас есть текстовый файл, содержащий некоторую статистическую информацию. Эта информация собрана в группы, а каждая группа содержит десять вещественных чисел. Файл большой, насчитывает, возможно, несколько тысяч таких групп и должен обрабатываться много раз. Очень невыгодно хранить такой файл в текстовом виде, поскольку при чтении файла будут производиться тысячи преобразований. Гораздо лучше произвести одно преобразование всех чисел, а затем записать их в другой файл в двоичном виде, более подходящем для дальнейшей работы. Программа convertgroupчитает текст из filedataи пишет данные в двоичном виде в binfile. Компонента этого последнего файла представляет собой массив из десяти вещественных чисел. Преобразование неявно выполняется при вызове процедуры,

read (filedata, binfile ­ [ind])

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

program convertgroup (filedata, binfile, output);

const

sizegroup = 0;

type

index = 1 .. sizegroup;

group = array [index] of real;

var

filedata : text;

binfile : file of group;