33. Б Е С Т И П О В Ы Е Ф А Й Л Ы
Бестиповые файлы позволяют записывать на диск произвольные участки
пвмяти ЭВМ и считывать их с диска в память. Операции обмена с бести-
повыми файлами осуществляется с помощью процедур BlokRead и
BlockWrite. Кроме того, вводится расширенная форма процедур Reset и
Rewrite. В остальном принципы работы остаются такими же, как и с ком-
понентными файлами.
Перед использованием логический файл
var f: File;
должен быть связан с физическим с помощью процедуры Assign. Далее
файл должен быть открыт для чтения или для записи процедурой Reset
или Rewrite, а после окончания работы закрыт процедурой Close.
При открытии файла длина буфера устанавливается по умолчанию в 128
байт. TURBO PASCAL позволяет изменить размер буфера ввода - вывода,
для чего следует открывать файл расширенной записью процедур
Reset(var f: File; BufSize: Word )
или
Rewrite(var f: File; BufSize: Word )
Параметр BufSize задает число байтов, считываемых из файла или за-
писываемых в него за одно обращение. Минимальное значение BufSize - 1
байт, максимальное - 64 К байт.
Чтение данных из бестипового файла осуществляется процедурой
BlockRead( var f: File; var X; Count: Word; var QuantBlock: Word );
Эта процедура осуществляет за одно обращение чтение в переменную X
количества блоков, заданное параметром Count, при этом длина блока
равна длине буфера. Значение Count не может быть меньше 1. За одно
обращение нельзя прочесть больше, чем 64 К байтов.
Необязательный параметр QuantBlock возвращает число блоков (буфе-
ров), прочитанных текущей операцией BlockRead. В случае успешного за-
вершения операции чтения QuantBlock = Count, в случае аварийной ситу-
ации параметр QuantBlock будет содержать число удачно прочитанных
блоков. Отсюда следует, что с помощью параметра QuantBlock можно
контролировать правильность выполнения операции чтения.
Запись данных в бестиповой файл выполняется процедурой
BlockWrite( var f: File; var X; Count: Word; var QuantBlock: Word );
которая осуществляет за одно обращение запись из переменной X коли-
чества блоков, заданное параметром Count, при этом длина блока равна
длине буфера.
Необязательный параметр QuantBlock возвращает число блоков (буфе-
ров), записанных успешно текущей операцией BlockWrite.
34. П О С Л Е Д О В А Т Е Л Ь Н Ы Й И П Р Я М О Й
Д О С Т У П
Смысл последовательного доступа заключается в том, что в каждый
момент времени доступна лишь одна компонента из всей последователь-
ности. Для того, чтобы обратиться (получить доступ) к компоненте с
номером К, необходимо просмотреть от начала файла К-1 предшествующую
компоненту. После обращения к компоненте с номером К можно обращаться
к компоненте с номером К+1. Отсюда следует, что процессы формирования
(записи) компонент файла и просмотра (чтения) не могут произвольно
чередоваться. Таким образом, файл вначале строится при помощи после-
довательного добавления компонент в конец, а затем может последова-
тельно просматриваться от начала до конца.
Рассмотренные ранее средства работы с файлами обеспечивают после-
довательный доступ.
TURBO PASCAL позволяет применять к компонентным и бестиповым фай-
лам, записанным на диск, способ прямого доступа. Прямой доступ озна-
чает возможность заранее определить в файле блок, к которому будет
применена операция ввода - вывода. В случае бестиповых файлов блок
равен размеру буфера, для компонентных файлов блок - это одна компо-
нента файла.
Прямой доступ предполагает, что файл представляет собой линейную
последовательность блоков. Если файл содержит n блоков, то они нуме-
руются от 1 через 1 до n. Кроме того, вводится понятие условной гра-
ницы между блоками, при этом условная граница с номером 0 расположена
перед блоком с номером 1, граница с номером 1 расположена перед бло-
ком с номером 2 и, наконец, условная граница с номером n находится
после блока с номером n.
Реализация прямого доступа осуществляется с помощью функций и про-
цедур FileSize, FilePos, Seek и Truncate.
Функция FileSize( var f ): Longint возвращает количество блоков в
открытом файле f.
Функция FilePos( var f ): Longint возвращает текущую позицию в
файле f. Позиция в файле - это номер условной границы. Для только что
открытого файла текущей позицией будет граница с номером 0. Это зна-
чит, что можно записать или прочесть блок с номером 1. После чтения
или записи первого блока текущая позиция переместится на границу с
номером 1, и можно будет обращаться к ьлоку с номером 2. После проч-
тения последней записи значение FilePos равно значению FileSize.
Процедура Seek( var f; N: Longint) обеспечивает назначение текущей
позиции в файле (позиционирование). В параметре N должен быть задан
номер условной границы, предшествующей блоку, к которому будет произ-
водиться последующее обращение. Например, чтобы работать с блоком 4,
необходимо задать значение N, равное 3. Процедура Seek работает с от-
крытыми файлами.
Процедура Truncate( var f ) устанавливает в текущей позиции приз-
нак конца файла и удаляет (стирает) все последующие блоки.
Пример. Пусть на НМД имеется текстовый файл ID.DAT, который содер-
жит числовые значения действительного типа по два числа в каждой
строке - значения аргумента и функции соответственно. Количество пар
чисел не более 200. Составить программу, которая читает файл, значе-
ния аргумента и функции записывает в одномерные массивы, подсчитывает
их количество, выводит на экран дисплея и записывает в файл компо-
нентного типа RD.DAT.
Program F;
var
rArg, rF: Array[1..200] of Real;
inf: Text;
outf: File of Real;
n, l: Integer;
begin
Assign(inf,'ID.DAT');
Assign(outf,'RD.DAT');
Reset(inf);
Rewrite(outf);
n:=0;
while not EOF(inf) do
begin
n:=n+1;
ReadLn(inf,rArg[n],rF[n])
end;
for l:=1 to n do
begin
WriteLn(l:2,rArg[l]:8:2,rF[l]:8:2);
Write(outf,rArg[l], rF[l]);
end;
close(outf)
end.
... ячейка, а имя переменной превращается в адрес ячейки. Появление этого адреса происходит в результате работы специального оператора языка (NEW), однако его значение в большинстве случаев не используется при программировании на алгоритмических языках типа Паскаль. Условимся считать, что адрес ячейки, которая будет хранить переменную А, есть А. Или, другими словами, А - это общее имя переменной и ...
... . Объясните, для чего служат разрешения и привилегии в Windows NT. Зав. кафедрой -------------------------------------------------- Экзаменационный билет по предмету СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Билет № 22 Перечислите возможности и инструменты системы программирования Microsoft Developer Studio. Укажите для чего предназначается буфер в системах ввода-вывода, ...
... . Поэтому так легко путешествовать по Всемирной паутине (WWW — Worl Wide Web), переходя с сайта на сайт по гиперссылкам. Для отображения в «плоском* тексте смысловых связей между основными разделами или понятиями можно использовать гипертекст. Гипертекст позволяет структурировать документ путем выделения в нем слов-ссылок (гиперссылок). При активизации гиперссылки (например, с помощью щелчка мышью ...
... # будет тесно интегрирован с языком XML[1]. 2.2 Паскаль Паскаль [PASCAL - акроним с французского - Program Applique a la Selection et la Compilation Automatique de la Litterature] - Процедурно-ориентированный язык программирования высокого уровня, разработанный в конце 1960-х гг. Никлаусом Виртом, первоначально для обучения программированию в университетах. Назван в честь французского ...
0 комментариев