gpt4 book ai didi

file - Ada中的追加文件操作

转载 作者:行者123 更新时间:2023-12-04 06:50:51 25 4
gpt4 key购买 nike

我对 Ada 很陌生,我发现很难掌握的一件事是在 Ada 中使用 Files 来在文件中 append 一些值。我在 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”中。

现在说我必须在同一程序中用不同的值集重复操作(比如使用外部循环),我需要存储每组值的最大元素。因此,我需要能够将每个集合的每个最大值 append 到文件“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;

在编译我得到:
  • 异常(exception)
  • 当 Name_Error =>
    |

    "Name_Error" is not visible non-visible declaration at a-sequio.ads:111, instance at line 5 non-visible declaration at a-textio.ads:298 non-visible declaration at a-ioexce.ads:23



  • 创建(文件 => Flo_File,模式 => Out_File,名称 => "bvalues.dat");
    |

    "Create" is not visible non-visible declaration at a-sequio.ads:73, instance at line 5 non-visible declaration at a-textio.ads:90




  • 15.
    如果我也把 Seq_Float_IO.Out_File 而不是 Out_File,它也不会改变。

    最佳答案

    Create,顾名思义,将创建一个全新的文件,即使一个文件已经存在。

    如果文件已经存在并且你想 append 到它,你可以使用 Open .

    如果你想打开它进行追加,但如果它不存在就创建它,正常的习惯用法是把CreateOpen 附近调用异常处理程序,像这样:

    begin
    Open (File => Flo_File, Mode => Append_File, Name => "bvalues.dat");
    exception
    when Name_Error =>
    Create (File => Flo_File, Mode => Out_File, Name => "bvalues.dat");
    end;

    从您的其余文本来看,您似乎正在考虑将临时值存储在文件中。除非您出于某种原因需要持久性(从崩溃中恢复等),否则我不会这样做。磁盘 IO 是方式方式 方式减缓。只需将临时值保存在变量中,并在获得结果后保存。

    关于file - Ada中的追加文件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3167981/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com