ada
Файлы и потоки ввода-вывода
Поиск…
замечания
Стандартная библиотека Ada обеспечивает ввод / вывод традиционных файлов текстовых или двоичных данных, а также ввода-вывода потоковых файлов. Файлы двоичных данных будут представлять собой последовательности значений типа, тогда как потоковые файлы могут быть последовательностями значений, возможно, разных типов.
Чтобы читать и записывать элементы разных типов из / в потоковые файлы, Ada использует подпрограммы, обозначенные атрибутами типов, а именно 'Read , 'Write , 'Input и 'Output . Последние два будут считывать и записывать границы массива, записывать дискриминанты и теги типа, в дополнение к голым вводам и выводам, которые будут выполнять Read и 'Write .
Создание и запись в файл
Процедуры Create , Put_Line , Close из пакета Ada.Text_IO используется для создания и записи в файл file.txt .
with Ada.Text_IO;
procedure Main is
use Ada.Text_IO;
F : File_Type;
begin
Create (F, Out_File, "file.txt");
Put_Line (F, "This string will be written to the file file.txt");
Close (F);
end;
Результат файла file.txt
This string will be written to the file.txt
Создание и запись в поток
Атрибуты, ориентированные на поток подтипов, вызываются для записи объектов в файл, без использования бинарных представлений по умолчанию.
with Ada.Streams.Stream_IO;
procedure Main is
type Fruit is (Banana, Orange, Pear);
type Color_Value is range 0 .. 255;
type Color is record
R, G, B : Color_Value;
end record;
Fruit_Colors : constant array (Fruit) of Color :=
(Banana => Color'(R => 243, G => 227, B => 18),
Orange => Color'(R => 251, G => 130, B => 51),
Pear => Color'(R => 158, G => 181, B => 94));
use Ada.Streams.Stream_IO;
F : File_Type;
begin
Create (F, Name => "file.bin");
for C in Fruit_Colors'Range loop
Fruit'Write (Stream (F), C);
Color'Write (Stream (F), Fruit_Colors (C));
end loop;
Close (F);
end Main;
Результирующий файл
00000000 00 2e f3 00 e3 00 12 00 01 2e fb 00 82 00 33 00
00000010 02 2e 9e 00 b5 00 5e 00
Открыть и прочитать из файла потока
Прочтите данные « Создать и записать в поток» обратно в программу.
with Ada.Streams.Stream_IO;
procedure Main is
--
-- ... same type definitions as in referenced example
--
Fruit_Colors : array (Fruit) of Color;
use Ada.Streams.Stream_IO;
F : File_Type;
X : Fruit;
begin
Open (F, Mode => In_File, Name => "file.bin");
loop
Fruit'Read (Stream (F), X);
Color'Read (Stream (F), Fruit_Colors (X));
end loop;
exception
when End_Error =>
Close (F);
pragma Assert -- check data are the same
(Fruit_Colors (Banana) = Color'(R => 243, G => 227, B => 18) and
Fruit_Colors (Orange) = Color'(R => 251, G => 130, B => 51) and
Fruit_Colors (Pear) = Color'(R => 158, G => 181, B => 94));
end Main;