 |
» |
|
|
 |
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 |
|