Previous topic | Ada Home Page | Index

Sequential I/O - Example



-- type declarations for records
type names is record
    fname : string (1..30);
    sname : string (1..30);
end record;

type addresses is record
    name  : names;
    phone : string (1..10);    
end record;

-- file I/O: sequential file of addresses records
package address_io is new SEQUENTIAL_IO (addresses);

-- procedure to create a new sequential file of addresses
procedure make_new_file 
    (a_file : in out address_io.FILE_TYPE)
is
    an_address : addresses;         -- storage for 1 address
    any_more   : CHARACTER := 'Y';  -- loop control
    slength    : NATURAL;           -- string length
begin
    -- create the new file
    CREATE (a_file, OUT_FILE, "address.dat");

    while ((any_more = 'Y') or (any_more = 'y')) loop

        -- obtain the data as text
        PUT ("Enter first name   ");
        GET_LINE (an_address.name.fname, slength);
        PUT ("Enter second name  ");
        GET_LINE (an_address.name.sname, slength);
        PUT ("Enter phone number ");
        GET_LINE (an_address.phone, slength);

        -- write the record to the file
        WRITE (a_file, an_address);

        -- continue?
        PUT ("Any more (y/n) ? ");
        GET (any_more); SKIP_LINE;
    end loop;
    CLOSE (a_file);
end make_new_file;

-- procedure to display a sequential file of addresses

procedure show_file 
    (a_file : in out address_io.FILE_TYPE)
is

    an_address : addresses;         -- storage for 1 address

begin
    -- create the new file
    OPEN (a_file, IN_FILE, "address.dat");

    while (not END_OF_FILE (a_file)) loop

        -- read the record from the file
        READ (a_file, an_address);

        -- display the data as text
        PUT (an_address.name.fname & ' ');
        PUT (an_address.name.sname & ' ');
        PUT (an_address.phone);
        NEW_LINE;

    end loop;

    CLOSE (a_file);
end show_file;


Previous topic | Ada Home Page | Index
c-lokan@adfa.oz.au / 23 Feb 96