Example of Using an Altered Sequence [ SORT-MERGE/XL Programmer's Guide ] MPE/iX 5.0 Documentation
SORT-MERGE/XL Programmer's Guide
Example of Using an Altered Sequence
The following example sorts the data file DATA. The entries in DATA are
sorted using an altered collating sequence that is explicitly specified
in the program. The sequence contains all displayable ASCII characters
and alters the order of the alphabetic characters to AaBbCc.... The
output file is called FRUIT
DATA - a file of fruit names
banana
Apple
Grapes
grapes
Pear
peach
orange
Example 4-1. SORTALT Program
program SORTALT (input,output);
{This program reads the file DATA, sorts by fruit name, }
{outputs to the file FRUIT, and uses an altered sequence.}
var
dataFileNum : INTEGER;
fruitFileNum: INTEGER;
status : INTEGER;
procedure HPFOPEN ; intrinsic;
procedure HPSORTINIT; intrinsic;
procedure HPSORTEND; intrinsic;
procedure FCLOSE; intrinsic;
Example 4-1. SORTALT Program, continued
procedure OPEN_FILES;
const
designator = 2;
domain = 3;
access = 11;
record_Size = 19;
var
datafile : packed array [1..10] of CHAR;
fruitfile : packed array [1..10] of CHAR;
permanent : INTEGER;
new : INTEGER;
write : INTEGER;
size : INTEGER;
begin
datafile := '%DATA%';
permanent := 1;
HPFOPEN (dataFileNum, status, designator, datafile, domain, permanent) ;
new := 4;
write := 1;
size := 80;
fruitfile := '%FRUIT%';
HPFOPEN (fruitFileNum, status, designator, fruitfile, domain, new, access,
write, record_size, size);
end;
Example 4-1. SORTALT Program, continued
Procedure DO_SORT;
var
inputfiles : array [1..2] of INTEGER;
outputfile : array [1..2] of INTEGER;
outputOption : INTEGER;
numKeys : INTEGER;
keys : array [1..4] of INTEGER;
altseq : packed array [1..96] of CHAR;
Begin
inputfiles [1] := dataFileNum;
inputfiles [2] := 0;
outputfile [1] := fruitFileNum; {From HPFOPEN}
outputfile [2] := 0;
OutputOption := 0; {Output record format same as input record format }
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 := ' ';
altseq[1] := CHR(0); {Data = ASCII, Sequence is altered}
altseq[2] := CHR(93); {94 characters in altered ASCII sequence}
{Put sequence in Altseq. Sequence contains all displayable ASCII characters}
strmove (15, '!"#$%&"()*+,-./', 1, altseq, 3);
strmove (16, '0123456789::<=>?', 1, altseq, 18);
strmove (16, '@AaBbCcDdEeFfGgH', 1, altseq, 34);
strmove (16, 'hIiJjKkLlMmNnOoP', 1, altseq, 50);
strmove (16, 'pQqRrSsTtUuVvWwX', 1, altseq, 66);
strmove (15, 'xYyZz[\]^_{|}~', 1, altseq, 81);
HPSORTINIT (status, inputfiles, outputfile, outputOption,,,
numKeys, keys, altseq,,,statistics,,);
{Check for errors in HPSORTINIT}
HPSORTEND (Status, ); {Check for errors in HPSORTINIT}
end;
Example 4-1. SORTALT Program, continued
Procedure CLOSE_FILES;
var
disposition : SHORTINT;
securityCode : SHORTINT;
Begin
disposition := 0;
securityCode := 0;
FCLOSE (dataFileNum, disposition, securityCode);
disposition := 1;
FCLOSE (fruitFileNum, disposition, securityCode);
end;
begin {main}
OPEN_FILES;
DO_SORT;
CLOSE_FILES;
end.
When this program is executed, the output is written to FRUIT. To view
FRUIT:
____________________________________________________________________
| |
| |
| :print fruit |
| |
| Apple |
| banana |
| Grapes |
| grapes |
| peach |
| Pear |
| orange |
| |
____________________________________________________________________
MPE/iX 5.0 Documentation