我对 Ada 很陌生,我发现很难掌握的一件事是在文件中附加一些值时使用 Ada 中的文件。我在 C 中这样做似乎更容易。无论如何,我还没有找到好的信息,我希望有人可以在这里帮助我。
我首先声明以下内容:
PACKAGE Seq_Float_IO IS NEW Ada.Sequential_IO (Element_Type => Long_Float);
Flo_File : Seq_Long_Float_IO.File_Type;
然后我创建一个文件“bvalues.dat”:
Seq_Long_Float_IO.Create(File => Flo_File, Name => "bvalues.dat");
然后写一个名为“最大”的变量,我使用:
Seq_Long_Float_IO.Write(File => Flo_File, Item => Largest);
我看到每次运行代码时,文件“bvalues.dat”都会被破坏,并在程序运行时将新值写入其中。这对我来说没问题。我在我的代码中所做的是找到一些值的最大值并将最大的元素存储在文件“bvalues.dat”中。
现在说我必须在同一个程序中使用不同的值集重复操作(比如使用外部循环),并且我需要存储每组值的最大元素。因此,我需要能够将每个集合的每个最大值附加到文件“bvalues.dat”中。如何做到这一点?
每次写入最大值后是否需要关闭文件“bvalues.dat”然后再次打开:
Seq_Long_Float_IO.Open(File => Flo_File, Mode => Append_File, Name => "bvalues.dat");
说在外循环中的索引被递增以获取下一组要计算最大元素的值之后,然后像我上面那样写
Seq_Long_Float_IO.Write(File => Flo_File, Item => Largest); ?
新信息:
我得到错误:
40. Seq_Long_Float_IO.Open(File => Flo_File, Mode => Append_File, Name => "bvalues.dat");
|
>>> "Append_File" is not visible
>>> non-visible declaration at a-sequio.ads:58, instance at line 8
>>> non-visible declaration at a-textio.ads:56
非常感谢...
测试文件:
WITH Ada.Text_IO;
WITH Ada.Sequential_IO;
PROCEDURE TestWrite5 IS
PACKAGE Seq_Float_IO IS NEW Ada.Sequential_IO (Element_Type => Float);
Flo_File : Seq_Float_IO.File_Type;
BEGIN
Seq_Float_IO.Open (File => Flo_File, Mode => Seq_Float_IO.Append_File,
Name =>"bvalues.dat");
exception
when Name_Error =>
Create (File => Flo_File, Mode => Out_File, Name => "bvalues.dat");
END TestWrite5;
在编译时我得到:
例外
当 Name_Error => |
“Name_Error”在 a-sequio.ads:111 处不可见不可见声明,在第 5 行的实例在 a-textio.ads:298 处不可见声明在 a-ioexce.ads:23 处不可见声明
创建(文件=> Flo_File,模式=> Out_File,名称=>“bvalues.dat”);|
“创建”在 a-sequio.ads:73 处是不可见的不可见声明,在第 5 行的实例在 a-textio.ads:90 处不可见声明
15.
如果我也放 Seq_Float_IO.Out_File 而不是只放 Out_File,它不会改变。