HPlogo SORT-MERGE/XL Programmer's Guide: HP 3000 MPE/iX Computer Systems > Chapter 3 Input and Output by Record

Example of Record Input

» 

Technical documentation

Complete book in PDF
» Feedback

 » Table of Contents

 » Index

The following program sorts the personnel files shown below. They are sorted by last name. The program marks the employee numbers of the temporary employees with an asterisk.

These two files, TERMEMP and PERMEMP, are used in the following example. (The data descriptions in the top line, and the character positions along the bottom do not appear in the file. They are for your convenience only.)

TEMPEMP

Information file about temporary employees:

   Last Name           First Name       Employee Number       Hire Date



   Gangley,            Tomas               000003              06/06/87

   Rields,             Evelyn              000007              07/12/87

   Everett,            Joyce               000029              10/19/87



   0        1         2         3         4         5         6         7

   1234567890123456789012345678901234567890123456789012345678901234567890
PERMEMP

Information file about permanent employees:

   Last Name          First Name        Employee Number       Hire Date



   Jones,              Eliza               000001              06/06/87

   Smith,              James               000005              06/06/87

   Jackson,            Johnathon           000006              06/06/87

   Washington,         Lois                000014              07/23/87

   Jackson,            Rosa                000022              08/15/87



   0        1         2         3         4         5         6         7

   1234567890123456789012345678901234567890123456789012345678901234567890

Example 3-1 SORTREC_IN Program

program SORTREC_IN (input,output);

{This program reads the files, TEMPEMP & PERMEMP, alters the TEMPEMP records, }

{passes all records to SORT/XL, and outputs to the file, ALLEMP.              }



var

   tempFileNum: INTEGER;

   permFileNum: INTEGER;

   outFileNum : INTEGER;

   status     : INTEGER;



procedure HPFOPEN; intrinsic;

procedure HPSORTINIT; intrinsic;

function  FREAD : SHORTINT; intrinsic;

procedure HPSORTINPUT; intrinsic;

procedure HPSORTEND; intrinsic;

procedure FCLOSE; intrinsic;





procedure OPEN_FILES;



const

   designator  = 2;

   domain      = 3;

   access      = 11;

   record_size = 19;



var

   tempfile  : packed array [1..10] of CHAR;

   permfile  : packed array [1..10] of CHAR;

   outfile   : packed array [1..10] of CHAR;

   permanent : INTEGER;

   new       : INTEGER;

   write     : INTEGER;

   size      : INTEGER;




begin

   tempfile := '%TEMPEMP%';

   permanent := 1;

   HPFOPEN (tempFileNum, status, designator, tempfile, domain, permanent) ;



   permfile := '%PERMEMP%';

   HPFOPEN (permFileNum, status, designator, permfile, domain, permanent) ;

   new := 4;

   write := 1;

   size := 80;

   outfile := '%ALLEMP%';

   HPFOPEN (outFileNum, status, designator, outfile, domain, new, access,

            write, record_size, size);



procedure DO_SORT;



var

   outputfile   : array [1..2] of INTEGER;

   outputOption : INTEGER;

   numKeys      : INTEGER;

   keys         : array [1..4] of INTEGER;

   altseq       : packed array [1..2] of CHAR;

   message      : packed array [1..80] of CHAR;

   length       : INTEGER;

   lngth        : SHORTINT;

   buffer       : packed array [1..80] of CHAR;

   recLength    : INTEGER;



begin

   outputfile [1] := outFileNum;                                 {From HPFOPEN}

   outputfile [2] := 0;

   outputOption := 0;       {output record format same as input record format }

   recLength := 80;                                         {maximum record length}

   numKeys := 1;                                                      {one key}

   keys[1] := 1;                                                   {key begins}

   keys[2] := 20;                                                  {key length}

   keys[3] := 0;                                                    {byte data}

   keys[4] := 0;                                              {ascending order}

   altseq[1] := CHR(255);                      {data = ASCII; sequence = ASCII}

   altseq[2] := CHR(255);                             {256 characters in ASCII}

end;




   HPSORTINIT (status,, outputfile, outputOption,

      recLength,, numKeys, keys, altseq,,,,,);



    length := 72;                                          {read 72 characters}



    repeat                            {read temporary employee file by record}

       Lngth := FREAD (TempFileNum, Buffer, Length);

       Buffer[40] := '*';                                     {Mark the record}

       if Lngth <> 0 then

          HPSORTINPUT (Status, Buffer, Length);

    until Lngth = 0;



    repeat                             {read permanent employee file by record}

      lngth := FREAD (permfilenum, buffer, length);

      if lngth <> 0 then

         HPSORTINPUT (status, buffer, length)

    until lngth = 0;



   HPSORTEND (status, );

end;



procedure CLOSE_FILES;



var

   disposition : SHORTINT;

   securityCode : SHORTINT;



begin

   disposition := 0;

   securityCode := 0;

   FCLOSE (tempFileNum, disposition, securityCode);

   FCLOSE (permFileNum, disposition, securityCode);

   disposition := 1;

   FCLOSE (outFileNum, disposition, securityCode);

end;



begin {main}

   OPEN_FILES;

   DO_SORT;

   CLOSE_FILES;

end.

When this program is executed, the output is written to ALLEMP. To view ALLEMP:

   :print allemp



   Everett,            Joyce              *000029              10/19/87

   Gangley,            Tomas              *000003              06/06/87

   Jackson,            Jonathan            000006              06/06/87

   Jackson,            Rosa                000022              08/15/87

   Jones,              Eliza               000001              06/06/87

   Rields,             Evelyn             *000007              07/12/87

   Smith,              James               000005              06/06/87

   Washington,         Lois                000014              07/23/87
Feedback to webmaster