КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Последовательный и прямой доступ
Операции над типизированными файлами Для типизированных файлов применимы процедуры Assign, Reset, Rewrite, Close, Rename, Erase, Eof, IOResult, рассмотренные ранее. Именно с помощью указанных процедур над типизированными файлами производятся такие операции, как связывание с физическим файлом, открытие и закрытие файла и т.п. Для организации же ввода-вывода в типизированных файлах используются процедуры Read и Write: Read(f, X); Write(f, X); где f – имя типизированного файла, а Х – переменная с таким же описанием, какое имеет компонента файла. Выполнение процедуры Read(f, X) состоит в чтении с внешнего устройства одной компоненты файла и записи ее в X. Повторное применение процедуры Read(f, X) обеспечит чтение следующей компоненты файла и запись ее в X. Пример: напечатать на экране все числа из файла var f: file of integer; x: integer; begin assign(f, ‘c:\test.dat’); reset(f); while not eof(f) do begin read(f, x); writeln(x); end; close(f); end. Выполнение процедуры Write(f, X) состоит в записи X в файл как одной компоненты. Повторное применение этой процедуры обеспечит запись X как следующей компоненты файла. Пример: записать в файл 5 чисел, заданных пользователем var f: file of integer; x: integer; begin assign(f, ‘c:\test.dat’); rewrite(f); for i:=1 to 5 do begin write(‘Введите число для записи в файл: ’); readln(x); write(f, x); end; close(f); end. Для работы с типизированными файлами можно использовать и расширенную форму записи операторов ввода и вывода: Read(f, X1, X2, …, XK); Write(f, X1, X2, …, XK); Здесь f – типизированный файл, а переменные Х1, Х2, … ХК должны иметь тот же тип, что и объявленный тип компонент файла f. Пример: записать в файл 5 чисел var f: file of integer; x: integer; begin assign(f, ‘c:\test.dat’); rewrite(f); write(f, 10, 12, 32, 43, 24); close(f); end. К типизированным файлам можно организовать не только последовательный, но и прямой доступ. Смысл последовательного доступа заключается в том, что в каждый момент времени доступна лишь одна компонента из всей последовательности. Для того, чтобы обратиться (получить доступ) к компоненте с номером К, необходимо просмотреть от начала файла К-1 предшествующую компоненту. После обращения к компоненте с номером К можно обращаться к компоненте с номером К+1. Отсюда следует, что процессы записи и чтения компонент файла не могут произвольно чередоваться. Файл вначале строится при помощи последовательного добавления компонент в конец, а затем может последовательно просматриваться от начала до конца. Рассмотренные ранее средства работы с файлами обеспечивают именно последовательный доступ. Прямой доступ означает возможность заранее определить в файле блок, к которому будет применена операция ввода-вывода. В случае нетипизированных файлов блок равен размеру буфера, для компонентных файлов блок – это одна компонента файла. Прямой доступ предполагает, что файл представляет собой линейную последовательность блоков. Если файл содержит n блоков, то они нумеруются от 1 до n. Кроме того, вводится понятие условной границы между блоками, при этом условная граница с номером 0 расположена перед блоком с номером 1, граница с номером 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 должен быть задан номер условной границы, которая должна стать текущей позицией. Естественно, что процедура Seek работает с открытыми файлами. Процедура Truncate(var f) устанавливает в текущей позиции признак конца файла и удаляет (стирает) все последующие блоки. Пример: если файл содержит более 10 компонент, то удалить все компоненты, следующие после 10-ой. var f: file of real; begin assign(f, ‘c:\test.dat’); reset(f); if filesize(f)>10 then begin seek(f, 10); truncate(f); end; close(f); end.
Дата добавления: 2014-01-06; Просмотров: 878; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |