跳轉到內容

Ada 程式設計/庫/Ada.Sequential_IO

來自華夏公益教科書,開放的書籍,開放的世界

Ada. Time-tested, safe and secure.
Ada。經久耐用、安全可靠。

此語言功能從 Ada 95 開始提供。

Ada.Sequential_IO預定義語言環境 自 Ada 95 以來的一部分。

並非所有讀取或寫入的資料都以文字格式儲存。為了儲存或程序間通訊,以二進位制格式儲存資料在空間和處理時間方面更有效率。

用於順序資料的二進位制輸入和輸出(即逐個讀取/寫入)由泛型 Ada 包 Ada.Sequential_IO 管理。

泛型包必須使用某些 Element_Type 例項化,並提供一個受限的私有 File_Type

檔案模式 In_FileOut_File 在開啟或建立時建立。

該包提供基本的輸入/輸出 (I/O) 操作

  • OpenCreate
  • CloseDeleteReset
  • ReadWrite

此外,該包還提供狀態和資訊函式

  • Is_Open
  • End_Of_File
  • NameModeForm

一個重要的限制是,檔案的每個元素都必須是相同的元素型別。

Ada 程式碼示例

[編輯 | 編輯原始碼]

例如,假設一位學生在一個 10 米乘 10 米的地塊中收集了樹木的資訊,並希望從資料中生成一份報告。
以下是一個讀取先前記錄的順序資料的簡單程式

  with Ada.Text_IO; --  Text I/O library
  with Ada.Float_Text_IO; --  Float I/O library
  with Ada.Sequential_IO; --  Sequential I/O library

  procedure Tree_Report is
   
  --  First, define the contents of the data record

     type Tree_Record is 
        record
           Common_Name     : String(1..20) := (others => ' ');
           Scientific_Name : String(1..20) := (others => ' ');
           Diameter        : Float         := 0.0; --  at breast height (DBH)
        end record; --  Tree_Record
  
--  Now, instantiate the I/O package for the data record

     package Tree_IO is new Ada.Sequential_IO(Tree_Record);
  
     Tree_File : Tree_IO.File_Type; --  Input data file
  
     Tree_Data : Tree_Record; --  Individual data record
  
  begin --  Tree_Report
  
--  Open the input data file.

     Tree_IO.Open(File => Tree_File,
                  Mode => Tree_IO.In_File,
                  Name => "tree.dat");
  
  --  Write report heading
     Ada.Text_IO.Set_Col(To =>  1); Ada.Text_IO.Put("COMMON NAME");
     Ada.Text_IO.Set_Col(To => 21); Ada.Text_IO.Put("SCIENTIFIC NAME");
     Ada.Text_IO.Set_Col(To => 41); Ada.Text_IO.Put("DBH");
     Ada.Text_IO.New_Line;
  
  Process_Tree_Data:
     while not Tree_IO.End_Of_File(Tree_File) loop
     
        Tree_IO.Read(Tree_File, Tree_Data); --  Read tree data
     
     --  Write tree inventory
        Ada.Text_IO.Put(Tree_Data.Common_Name);
        Ada.Text_IO.Put(Tree_Data.Scientific_Name);
        Ada.Float_Text_IO.Put(Tree_Data.Diameter,Fore=>2,Aft=>2,Exp=>0);
        Ada.Text_IO.New_Line;
        
     end loop Process_Tree_Data;
  
--  All data records have been read, and end_of_file detected.

     Tree_IO.Close(Tree_File); --  Done, close file
  
  end Tree_Report;
--                     Standard Ada library specification
--   Copyright (c) 2003-2018 Maxim Reznik <reznikmm@gmail.com>
--   Copyright (c) 2004-2016 AXE Consultants
--   Copyright (c) 2004, 2005, 2006 Ada-Europe
--   Copyright (c) 2000 The MITRE Corporation, Inc.
--   Copyright (c) 1992, 1993, 1994, 1995 Intermetrics, Inc.
--   SPDX-License-Identifier: BSD-3-Clause and LicenseRef-AdaReferenceManual
-- -------------------------------------------------------------------------

with Ada.IO_Exceptions;
generic
   type Element_Type (<>) is private;
package Ada.Sequential_IO is

   type File_Type is limited private;

   type File_Mode is (In_File, Out_File, Append_File);

   --  File management

   procedure Create (File : in out File_Type;
                     Mode : in File_Mode := Out_File;
                     Name : in String := "";
                     Form : in String := "");

   procedure Open  (File : in out File_Type;
                    Mode : in File_Mode;
                    Name : in String;
                    Form : in String := "");

   procedure Close (File : in out File_Type);
   procedure Delete (File : in out File_Type);
   procedure Reset (File : in out File_Type; Mode : in File_Mode);
   procedure Reset (File : in out File_Type);

   function Mode   (File : in File_Type) return File_Mode;
   function Name   (File : in File_Type) return String;
   function Form   (File : in File_Type) return String;

   function Is_Open (File : in File_Type) return Boolean;

   --  Input and output operations

   procedure Read  (File : in File_Type; Item : out Element_Type);
   procedure Write (File : in File_Type; Item : in Element_Type);

   function End_Of_File (File : in File_Type) return Boolean;

   --  Exceptions

   Status_Error : exception renames IO_Exceptions.Status_Error;
   Mode_Error   : exception renames IO_Exceptions.Mode_Error;
   Name_Error   : exception renames IO_Exceptions.Name_Error;
   Use_Error    : exception renames IO_Exceptions.Use_Error;
   Device_Error : exception renames IO_Exceptions.Device_Error;
   End_Error    : exception renames IO_Exceptions.End_Error;
   Data_Error   : exception renames IO_Exceptions.Data_Error;

private

   type File_Type is limited null record;

end Ada.Sequential_IO;

另請參閱

[編輯 | 編輯原始碼]

華夏公益教科書

[編輯 | 編輯原始碼]

外部示例

[編輯原始碼]

Ada 參考手冊

[編輯 | 編輯原始碼]

開源實現

[編輯 | 編輯原始碼]

FSF GNAT

drake

華夏公益教科書