Ada Programming/Libraries/Ada.Sequential IO
Not all data read or written is in text format. For storage or inter-process communication, it is more space- and processing time-efficient to store data in binary format.
Binary input and output for sequential data (that is, read/written one after another) is managed by the generic Ada package
The generic package must be instantiated with some
Element_Type, and provides a limited private
The file mode,
Out_File, is established on open or create.
The package provides the basic input/output (I/O) operations:
In addition, the package provides status and information functions:
One important restriction is that every element of a file must be the same element type.
Ada Code Example
For example, suppose that a student has collected information on trees in a 10 meter by 10 meter plot, and wishes a report generated from the data.
The following is a simple program to read the sequential data, previously recorded:
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;