Реорганизация данных в файле произвольного доступа

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

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

Например, если переменная I содержит номер требуемой записи, а переменная типа запись называется RecVar, то обычный доступ к файлу произвольного доступа обеспечивается следующим оператором Get:

Get #fileNum, I, RecVar

Если массив индексов называется theIndex(), то метод доступа изменяется таким образом:

Get #fileNum, theIndex(I), RecVar

Первоначально каждый элемент массива theIndex() содержит свой собственный номер:

TheIndex(1) = 1

TheIndex(2) = 2

TheIndex(3) = 3

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

TheIndex(1) = 1

TheIndex(2) = 3

TheIndex(3) = 2

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

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

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




Создание пользовательских объектов

Определение пользовательского объекта

Программный пользовательский объект в Visual Basic привязан к модулю. Имя модуля является именем объекта, и применяется для доступа к свойствам объекта. Если объекты стандартные, то следует начинать с класса объекта, а затем, использовав порождающую функцию вроде метода ADD, можно создавать объекты этого класса. В Visual Basic класс создать нельзя: следовательно, необходимо создавать временный пользовательский объект. Однако после того, как вы его создадите, доступ к нему ничем не будет отличаться от доступа к любому другому объекту.

Для того чтобы создать пользовательский объект, начните с нового модуля. Не используйте существующий модуль, поскольку объединение обычных процедур с пользовательским объектом приведет к ошибке. Для присвоения модулю имени создаваемого пользовательского объекта воспользуйтесь директивой Edit/Sheet/Rename или дважды щелкните мышью на корешке модуля. Для объявления глобальных переменных модуля как частных используйте в заголовке модуля оператор Private, а не Dim. Таким образом, вы защитите все данные объекта от доступа внешних процедур. Единственным способом доступа к данным, сохраненным в модуле, является доступ к его свойствам и методам. Любые процедуры, входящие в состав этого модуля, могут использоваться только процедурами, входящими в его состав, и также должны быть объявлены как частные.

Кроме того, в заголовок процедуры можно поместить оператор Option Private Module, что сделает свойства и методы данного объекта доступными только из текущего проекта, но не из модулей и процедур, не входящих в данный проект.

Наши рекомендации