这个问题是帖子的后续内容
关于在 Ada 中写入文件。
我选择将这个问题放在单独的帖子中,以便更多人看到它,因为我已经在上述帖子中接受了一个稍微不同的问题(文件处理中的异常)的答案。
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;
File_Name : String;
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 => File_Name );
exception
when Seq_Float_IO.Name_Error =>
Seq_Float_IO.Create (
File => File,
Mode => Seq_Float_IO.Out_File,
Name => 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;
在编译上面我得到一个错误如下:
- X_File : Seq_Float_IO.File_Type;
- 文件名:字符串;|
不允许不受约束的子类型(需要初始化)提供初始值或显式数组边界
- 文件名:字符串;|
我不知道两件事:
- 我有 File_Name : String; 因为我希望能够写入不同的文件。所以我想要一个通用字符串,而不是类似:
文件名:常量字符串:=“one_File_Only.dat”
- 将过程 Open_Data 保存在单独的 ads 和 adb(用于正文)文件中会更好吗?
非常感谢...
新的...
我已将代码修改如下:
WITH Ada.Sequential_IO;
PROCEDURE TEST1 is
package Seq_Float_IO is new Ada.Sequential_IO (Element_Type => Float);
X_File, Y_File : Seq_Float_IO.File_Type;
Name_X : CONSTANT String := "domainvalues.dat";
Name_Y : CONSTANT String := "ordinatevalues.dat";
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 => Name_X );
exception
when Seq_Float_IO.Name_Error =>
Seq_Float_IO.Create (
File => File,
Mode => Seq_Float_IO.Out_File,
Name => Name_X);
end;
END Open_Data;
x : CONSTANT Float := 2.0;
BEGIN --main program
Open_Data(File => X_File, Name => Name_X);
Seq_Float_IO.Write(File => X_File, Item => x);
Seq_Float_IO.Close(File => X_File);
Open_Data(File => Y_File, Name => Name_Y);
Seq_Float_IO.Write(File => Y_File, Item => x);
Seq_Float_IO.Close(File => Y_File);
END TEST1;
如你所见,我有
Seq_Float_IO.Open (
File => File,
Mode => Seq_Float_IO.Append_File,
Name => Name_X );
我已将 Name_X 作为 Name 所采用的参数,但这不正确,因为我应该能够传入一个通用名称,它可以是 Name_X 或 Name_Y。对不起,伙计们,我不知道该放什么。
非常感谢您的帮助。谢谢