Пакет AdaText_IO
Основой организации текстового ввода/вывода Ады является пакет Ada.Text_IO
и коллекция его дочерних пакетов.
Этот пакет обеспечивает средства, которые позволяют манипулировать текстовыми файлами.
Примерами таких средств могут служить подпрограммы Close, Delete, Reset, Open, Create ...
Главный тип данных пакета Ada.Text_IO - это лимитированный приватный тип File_Type. Он является внутренним представлением файла.
Стандарт Ada95 добавил тип File_Access, как ссылку на тип File_Type
(объекты имеющие тип File_Access часто называют дескрипторами файлов).
При открытии или создании файла, производится ассоциирование между именем файла в системе и объектом типа File_Type.
Кроме того, при открытии или создании файла, необходимо указывать режим доступа к файлу:
In_File | - | чтение файла |
Out_File | - | запись в файл |
Append_File | - | запись в конец существующего файла (Ada95) |
Заметим, что эти значения имеют тип File_Mode, который также описывается в пакете Ada.Text_IO.
После этого, объект типа File_Type может быть использован для выполнения непосредственных обращений к файлу.
В приведенном ниже примере, процедура Create создает файл "first_file.dat", после чего, в этот файл процедурами Put и New_Line производится запись строки "It is my first text file!".
В завершение, процедура Close закрывает ранее открытый файл.
with Ada.Text_IO; use Ada.Text_IO;
procedure Demo_File_IO is My_File : Ada.Text_IO.File_type; begin Create(File => My_File, Mode => Out_File, Name => "first_file.dat"); Put(File => My_File, Item => "It is my first text file!"); New_Line(My_File); Close(My_File); -- требуется! Ада может не закрыть -- открытый вами файл end Demo_File_IO; |
Программа, представленная в следующем примере, выполняет посимвольное чтение данных из одного файла ("input.dat") и посимвольную запись этих же данных в другой файл ("output.dat").
with Ada.Text_IO; use Ada.Text_IO;
procedure Read_Write is Input_File : File_type; Output_File : File_type; Char : Character; begin Open(Input_File, In_File, "input.dat"); Create(Output_File, Out_File, "output.dat"); while not End_Of_File(Input_File) loop while not End_Of_Line(Input_File) loop Get(Input_File, Char); Put(Output_File, Char); end loop; Skip_Line(Input_File); New_Line(Output_File); end loop; Close(Input_File); Close(Output_File); end Read_Write; |
Необходимо обратить внимание на то, что в таких языках программирования как Ада и Паскаль существует концепция терминатора строки, который не является обычным символом файла.
Это значит, что понятие "конец строки" ("End Of Line", или сокращенно - EOF) Ады отличается от того, что принято в системах DOS, Windows и UNIX.
В этих системах для обозначения конца строки используется обычный символ (символ "CR" - для UNIX, и символы: "CR", "LF" - для DOS и Windows), который может быть обработан обычными средствами символьной обработки.
Для того чтобы, при чтении из файла, процедура Read
"прошла" этот терминатор, необходимо использовать процедуру Skip_Line.
Подобным образом, для того чтобы осуществить построчную запись выходного файла, должна быть использована процедура New_Line.
Пакет Ada.Text_IO обеспечивает большое число процедур для выполнения различных файловых манипуляций.
В качестве примера наиболее часто используемых процедур можно перечислить следующие процедуры:
Create | - | Создает файл с указанным именем и режимом использования. Примечательно, что если файл имеет строку null, то файл является временным и позднее будет удален. |
Open | - | Открывает файл с указанным именем и режимом использования. |
Delete | - | Удаляет указанный файл. При попытке удалить открытый файл происходит ошибка. |
Reset | - | Возвращает позицию чтения (или записи) в начало файла. |
End_of_File | - | Возвращает истину если мы находимся в конце текущего файла. |
End_of_Line | - | Возвращает истину если мы находимся в конце текущей строки текста. |
Is_Open | - | Возвращает истину если текущий файл открыт. |
Mode | - | Возвращает режим использования текущего файла. |
Name | - | Возвращает строку имени текущего файла. |
Поэтому, для получения более подробных сведений лучше всего непосредственно обратиться к спецификации пакета Ada.Text_IO.