代码之家  ›  专栏  ›  技术社区  ›  yCalleecharan

Ada中的追加文件操作

  •  2
  • yCalleecharan  · 技术社区  · 16 年前

    我首先声明如下:

    PACKAGE Seq_Float_IO IS NEW Ada.Sequential_IO (Element_Type => Long_Float);
    Flo_File : Seq_Long_Float_IO.File_Type;
    

    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”中。如何做到这一点?

    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;
    

    1. 例外

      1. |

        “名称错误”不可见 a-sequio不可见声明。ads:111,第5行实例 在a-textio不可见声明。ads:298 a-IOEXE不可见声明。ads:23

      2. |

        “创建”不可见 在a-textio不可见声明。ads:90

      15

    如果我也把Seq\u Float\u IO.Out\u文件放进去,而不是只把Out\u文件放进去,它不会改变。

    1 回复  |  直到 16 年前
        1
  •  3
  •   T.E.D.    16 年前

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

    Open .

    如果您想打开它进行附加,但如果它不存在,请创建它,通常的习惯用法是将 Create 正常开放 ,就像这样:

    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是一种方式 方式