我在学习Ada,我需要对文件操作进行一些说明。我只有一种类型:浮动,我必须创建2个文件,将存储浮动值(附加操作)。所以我实例化一个float类型的包,然后声明2个文件变量X_File和Y_File。然后我会在文件不存在的情况下发出异常。Ada文件操作:实例化和异常
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 1个例外,而不是第二个用于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。因为我不知道该放什么内容,所以我将Name =>的两个字段留空。
而且我也把文件=>文件...这似乎不好!
感谢。有用!有关块语句很好了解。 – yCalleecharan 2010-07-03 13:28:05
是的,我也会研究如何创建一个合适的子程序或程序。 – yCalleecharan 2010-07-03 13:33:57
优秀!顺便说一句,“子程序”是一个函数或过程的Ada术语。因为'File_Type'是有限的私有的,所以一个过程将更直接。例如,'过程Open_Data(文件:输出Seq_Float_IO.File_Type;名称:在字符串中)是...' – trashgod 2010-07-03 13:47:34