Я изучаю Аду, и мне нужны некоторые пояснения по файловым операциям. У меня есть только один тип: float, и мне нужно создать 2 файла, которые будут хранить значения с плавающей запятой (с операцией добавления). Поэтому я создаю экземпляр пакета для типа float, а затем объявляю 2 файловые переменные X_File и Y_File. Затем я помещаю исключения на случай, если файлы еще не существуют.
WITH Ada.Text_IO;
WITH Ada.Sequential_IO;
PROCEDURE TestWrite6 IS
PACKAGE Seq_Float_IO IS NEW Ada.Sequential_IO (Element_Type => Float);
X_File : Seq_Float_IO.File_Type;
Y_File : Seq_Float_IO.File_Type;
BEGIN
Seq_Float_IO.Open (File => X_File, Mode => Seq_Float_IO.Append_File,
Name => "xvalues.dat");
exception
when Seq_Float_IO.Name_Error =>
Seq_Float_IO.Create (File => X_File, Mode => Seq_Float_IO.Out_File,
Name => "xvalues.dat");
Seq_Float_IO.Open (File => Y_File, Mode => Seq_Float_IO.Append_File,
Name => "yvalues.dat");
exception
when Seq_Float_IO.Name_Error =>
Seq_Float_IO.Create (File => Y_File, Mode => Seq_Float_IO.Out_File,
Name => "yvalues.dat");
END TestWrite6;
У меня есть два отдельных исключения для каждого файла xvalues.dat и yvalues.dat. Теперь при компиляции я получаю сообщение об ошибке:
16.
17. Seq_Float_IO.Open (File => Y_File, Mode => Seq_Float_IO.Append_File, Name => "xvalues.dat");
18. exception
|
>>> exception handler not permitted here
19. when Seq_Float_IO.Name_Error =>
Кажется, у меня может быть только одно исключение для xvalues.dat, а не второе для yvalues.dat. Что я делаю не так?
Большое спасибо ...
Некоторые изменения: написать общую процедуру для открытия и добавления значений в файл:
WITH Ada.Sequential_IO;
WITH Ada.Float_Text_IO;
PROCEDURE TEST is
package Seq_Float_IO is new Ada.Sequential_IO (Element_Type => Float);
X_File : Seq_Float_IO.File_Type;
procedure Open_Data(File : in out Seq_Float_IO.File_Type;
Name : in String) is
BEGIN
begin
Seq_Float_IO.Open (
File => File,
Mode => Seq_Float_IO.Append_File,
Name => );
exception
when Seq_Float_IO.Name_Error =>
Seq_Float_IO.Create (
File => File,
Mode => Seq_Float_IO.Out_File,
Name => );
end;
END Open_Data;
x : CONSTANT Float := 2.0;
BEGIN --main program
Open_Data(X_File, "xvalues.dat");
Seq_Float_IO.Write(File => X_File,Item => x);
Seq_Float_IO.Close(File => X_File);
END TEST;
В процедуре Open_Data. Я оставил 2 поля для Name => незаполненными, так как не знаю, что туда вставить.
И я также положил File => File ... это не так хорошо !!!