Пакет AdaDirect_IO
Пакет Ada.Direct_IO построен поверх пакета Ada.Sequential_IO.
Он предусматривает возможность прямого обращения к необходимой записи в файле, определения размера файла и определения текущего индекса.
Кроме этого, он дополнительно позволяет открывать файлы в режиме - Inout_File
(чтение/запись).
Такие средства, в совокупности с подходящим индексирующим пакетом, должны позволять построение пакета файловой обработки очень высокого уровня.
Следующий пример демонстрирует использование файлов с прямым доступом:
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
with Ada.Direct_IO; -- настраиваемый пакет with Personnel_Details; -- имеет: use Personnel_Details; -- тип записи "Personnel", -- процедуру "Display_Personnel", -- и т.д. ... with Display_Menu; -- внешняя процедура отображения меню procedure Direct_Demo is package Person_IO is new Direct_IO(Personnel); Data_File : Person_IO.File_type; A_Person : Personnel; Option : Integer; Employee_No : Integer; begin Person_IO.Open(Data_File, Inout_File, "Person.dat"); loop Display_Menu; Get_Option(Option); case Option is when 1 => Get(Employee_No); Set_Index(Positive_Count(Employee_No)); Read(Data_File, A_Person); Display_Person(A_Person); when 2 => Get(Employee_No); Set_Index(Positive_Count(Employee_No)); Read(Data_File, A_Person); Get_New_Details(A_Person); Write(Data_File, A_Person); when 3 => exit; when others => Put("not a great option!"); end case; end loop; Close(Data_File); end Direct_Demo; |
Здесь, для краткости подразумевается, что записи о служащих сохраняются в порядке номеров служащих - Employee_No.
Также заметим, что мы не акцентируем внимание на содержимом внешних модулей: пакете Personnel_Details и процедуре Display_Menu.