<<
>>

Двоичные файлы прямого доступа

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

Средства для работы с двоичными файлами прямого доступа находятся в родовом пакете Ada. Direct_IO. Элементы этих файлов также должны принадлежать к типу Element_Type, который является формальным родовым параметром пакета.

Для работы с файлами прямого доступа разрешены три режима: In_File (ввод из файла), InOut_File (ввод из файла и вывод в файл), Out_File (вывод в файл).

Основное отличие файлов прямого доступа — обработка их элементов производится в произвольном порядке. На практике для работы с элементом такого файла надо указывать его индекс.

Индекс отображает положение элемента в файле. Непосредственно после открытия файла значение индекса устанавливается равным 1. Для обработки индекса в пакете Ada.Direct_IO имеются:

? процедура установки индекса Set_Index;

? функция определения индекса Index;

? функция определения максимального индекса Size.

Процедура

procedure Set_Index ( File : File_Type; To : Positive_Count );

устанавливает индекс, равный значению параметра To.

ПРИМЕЧАНИЕ ---------------------------------------------------------------------------------------------------

Диапазон значений подтипа Positive_Count — от 1 до зависящего от реализации числа Count’Last.

Функция

function Index ( File : File_Type ) return Positive_Count;

возвращает значение, равное текущему индексу файла.

Имеются две модификации процедуры чтения элемента из файла прямого доступа и занесения его в переменную Item:

procedure Read ( File : in File_Type; Item : out Element_Type;

From : in Positive_Count );

procedure Read ( File : in File_Type; Item : out Element_Type);

Двоичные файлы прямого доступа

555

Для первой модификации из файла читается элемент, индекс которого указы- вается параметром From. Для второй модификации индекс считываемого элемента равен текущему значению индекса файла. После выполнения операции ввода значение индекса увеличивается на единицу.

Аналогичным образом предусмотрены две разновидности процедуры записи из переменной Item в элемент файла:

procedure Write ( File : in File_Type; Item : in Element_Type;

To : in Positive_Count );

procedure Write ( File : in File_Type; Item : in Element_Type );

Параметр To задает индекс элемента, в который записываются данные. Если параметр To не указан, то используется текущее значение индекса файла. После завершения вывода значение индекса увеличивается на 1.

Максимально возможное значение индекса файла возвращается с помощью функции

function Size ( File : File_Type ) return Count;

В качестве примера рассмотрим программу, в которой:

1) создан экземпляр пакета Ada.Direct_IO — для работы с типом Book;

2) объявлена процедура Format — для создания дискового файла прямого доступа (каталога книг) и последовательного заполнения его фиктивным содержимым — пробелами;

3) объявлена процедура Load — для загрузки в каталог фактической информации (по конкретному индексу — номеру);

4) объявлена процедура View — для просмотра на дисплее записи с конкретным номером;

5) приведены примеры использования этих процедур для решения конкретных

задач.

Программа 18.6

with Ada.Text_IO, Ada.Direct_IO; use Ada.Text_IO; procedure Main5 is

type Book is record Number : Positive;

Author : String ( 1 ..

17 ) := ( others => ' ' );

Name : String ( 1 .. 25 ) := ( others => ' ' ); end record;

package Book_IO is new Ada.Direct_IO ( Book );

One_Book : Book;

procedure Format ( N : Positive; Cat_Name : String ) is Inner : Book_IO.File_Type; -- внутренний файл begin

Book_IO.Create ( File => Inner,

Mode => Book_IO.Out_File,

Name => Cat_Name ); for i in 1 .. N loop

One_Book.Number := i;

Book_IO.Write ( Inner, One_Book );

end loop;

Book_IO.Close ( Inner );

продолжение #

556

Глава 18. Ввод-вывод и файлы

end Format;

procedure Load ( One : Book; I : Book_IO.Positive_Count; Cat_Name : String ) is

Inner : Book_IO.File_Type; -- внутренний файл begin

Book_IO.Open ( File => Inner,

Mode => Book_IO.Out_File,

Name => Cat_Name );

Book_IO.Write ( Inner, One, I );

Book_IO.Close ( Inner ); end Load;

procedure View ( I : Book_IO.Positive_Count;

Cat_Name : String ) is One : Book;

Inner : Book_IO.File_Type; -- внутренний файл begin

Book_IO.Open ( File => Inner,

Mode => Book_IO.In_File,

Name => Cat_Name );

Book_IO.Read ( Inner, One, I );

Put ("Number is "); Put ( Positive'Image (One.Number)); New_Line;

Put ("Author is "); Put_Line ( One.Author );

Put ("Name is "); Put_Line ( One.Name );

Book_IO.Close ( Inner ); end View;

File_Name : constant String := "Catalog.txt"; begin -- начало программы

Format ( 10_000, File_Name ); -- форматирование каталога One_Book.Number := 10;

One_Book.Author := "Н.Гоголь";

One_Book.Name := "Ревизор";

Load ( One_Book, 10, File_Name ); -- запись в каталог

One_Book.Number := 20;

One_Book.Author := "М.Лермонтов";

One_Book.Name := "Демон";

Load ( One_Book, 20, File_Name ); -- запись в каталог

View ( 20, File_Name ); -- просмотр 20-й записи

end Main5; -- конец программы

<< | >>

Еще по теме Двоичные файлы прямого доступа:

  1. § 3. Формы прямого волеизъявления граждан
  2. Основы режиссуры прямого эфира
  3. Прямой доступ к информации и предузнавание
  4. 3. Доступ к источникам информации.
  5. Непосредственный доступ и предсказания
  6. § 6. Равный доступ к государственной службе
  7. 2.1.4. Классификация информации по доступу к ней
  8. Ключ доступен каждому.
  9. Прямой доступ к информации (на основе книг Барбары Энн Бреннан).
  10. Метод Ключ – защита от стресса и доступ к управлению внутренними ресурсами
  11. Принцип обеспечения потерпевшим права на доступ к правосудию и возмещение причиненного преступлением вреда
  12. Статья 200. Незаконные действия с документами на перевод, платежными карточками и иными средствами доступа к банковским счетам, оборудованием для их изготовления
  13. 15.6. Порядок доступа к Архивным фондам и использования архивных документов
  14. Статья 361-2. Несанкционированные сбыт или распространение информации с ограниченным доступом, которая сохраняется в электронно-вычислительных машинах (компьютерах), автоматизированных системах, компьютерных сетях или на носителях такой информации
  15. Статья 362. Несанкционированные действия с информацией, обрабатывается в электронно-вычислительных машинах (компьютерах), автоматизированных системах, компьютерных сетях или сохраняется на носителях такой информации, совершенные лицом, имеет право доступа к ней
  16. 2. ИСТОЧНИКИ ИНФОРМАЦИИ. СПЕЦИФИКА И АЛГОРИТМЫ РАБОТЫ С ИСТОЧНИКАМИ ИНФОРМАЦИИ. ДОСТУП К ИСТОЧНИКАМ ИНФОРМАЦИИ. ПРАВОВЫЕ И ЭТИЧЕСКИЕ НОРМЫ РАБОТЫ С ИСТОЧНИКАМИ ИНФОРМАЦИИ.
  17. МЕТОД КОРРЕКЦИИ ПРОШЛОГО
  18. Социальные сети
  19. Внутренние чувства
  20. 7.8. ВНУТРЕННИЙ ПОРЯДОК