Example of Record Input [ SORT-MERGE/XL Programmer's Guide ] MPE/iX 5.0 Documentation
SORT-MERGE/XL Programmer's Guide
Example of Record Input
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;
Example 3-1. SORTREC_IN Program, continued
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;
Example 3-1. SORTREC_IN Program, continued
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 |
| |
_____________________________________________________________________________
MPE/iX 5.0 Documentation