Новости           

Программы

Turbo Pascal

Игры  

Документация

"Странности"

FAQ

Ссылки

Благодарности

Об авторе

 

Яндекс цитирования

                    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.

На первую страницу

 

Rambler's Top100 Rambler's Top100
(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz