русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Последовательный и прямой доступ к файлам


Дата добавления: 2015-06-12; просмотров: 4957; Нарушение авторских прав


Файл — это последовательная структура данных. И естественным способом доступа к компонентам файла является последовательный доступ. После открытия файла он «ждет» чтения или записи первого компонента. После каждого очередного обращения к файлу он готов выдать или принять очередной по счету компонент. В данном случае возможно только косвенно управлять последовательностью чтения или записи.

Пусть нужно прочитать из файла f пятый элемент и записать его в переменную V соответствующего типа. Это можно сделать, считав «впустую» четыре первых значения:

Reset( f ); { файл открыт для чтения первого компонента }

for i:=1 to 5 do Read ( f, v );

Reset(f); { переустановка снова на первый компонент }

В V останется лишь последнее, пятое, значение из файла. Это, конечно, не самое удачное решение проблемы прямого доступа, т.е. доступа сразу к тому компоненту, который нас интересует. Гораздо лучше будет использовать встроенные процедуры и функции Турбо Паскаля для прямого доступа к компонентам файла (табл. 12.4). {254}

Функции и процедуры Назначение
FileSize(VAR : f) : LongInt Возвращает число записей компонентов или блоков в открытом файле f
FilePos(VAR f) : LongInt Функция возвращает номер записи компонента или блока в открытом файле f, предшествующий тому, который будет считан или записан последующей операцией ввода-вывода
Seek(VAR f; W : LongInt) Устанавливает текущим компонентом (блоком) в открытом файле f компонент с номером N, отсчитанным от нулевого. Назначенный компонент будет считан или записан последующей операцией ввода-вывода
Truncate(VAR f) Отсекает часть открытого файла f, начиная с того компонента, который был бы считан последующей операцией ввода, и подтягивает на ее место конец файла

Внимание! Процедуры и функции прямого доступа применимы только к типизированным и бестиповым файлам, но не к текстовым.



В эту же таблицу можно было бы включить и функцию EOF(VAR f), описанную ранее в этой главе как общую для всех файлов.

Прямой доступ означает возможность позиционировать внутри файла указатель на интересующую нас запись. В случае типизированных файлов запись в файле — это компонент файла, а в случае бестиповых — блок, равный по размеру буферу файла. Далее в этом разделе мы будем использовать термин «запись» именно в этом смысле (ранее мы избегали его из-за двусмысленности: запись компонента в файле сама может быть записью (record) в смысле типа данных).

Файл заполняется последовательно от начала. Его структура всегда линейна: запись следует за записью. В нем не может быть «дыр». Добавить запись можно лишь в конец, удлинив тем самым сплошную их цепочку в файле. Правда, можно заместить любую {255} существующую в файле запись, но это не изменит его структуры и длины.

Для индексации структуры файла достаточно просто пронумеровать его записи, что и делается в Турбо Паскале. Но эта нумерация достаточно своеобразна. Можно считать, что нумеруются не записи, а как бы границы между ними (рис. 12.8). Эти границы — чистая условность, и в реальном файле записи не разделяются, а идут подряд. Просто они позволяют наглядно изобразить принцип нумерации записей. Самая первая граница (в начале файла) имеет номер 0.

| ┌───┐ | ┌───┐ | ┌───┐ | ┌───┐ |

НАЧАЛО | | 1 | | | 2 | | | 3 | ... | | n | | КОНЕЦ ФАЙЛА

| └───┘ | └───┘ | └───┘ | └───┘ |

0 1 2 n-1 n

Обозначения:

 
Запись (компонент файла или блок)

 

| — Условная граница между записями

Рис. 12.8

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



<== предыдущая лекция | следующая лекция ==>
Бестиповые файлы и операции ввода-вывода | Опрос размеров файлов и позиции в них


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.134 сек.