%KEYVAL
Extract the value of an index file’s key from a record
WSupported on Windows
|
USupported on Unix
|
VSupported on OpenVMS
|
NSupported in Synergy .NET
|
contents = %KEYVAL(channel, record, keynum[, result])
Return value
contents
The contents of the referenced key, concatenated in key segment order. (a)
Arguments
channel
The number of the channel opened to an ISAM file on which the record is being processed. (n)
record
The record from which the key value will be extracted. (a)
keynum
The number of a key for the opened file. (n)
result
(optional) The variable that will be loaded with the contents of the referenced key. (a)
Discussion
%KEYVAL returns the value of an index file’s key from an existing record matching the layout in the file specified by channel. No file I/O is actually performed.
This function enables you to get an entire segmented key. If result is present, the return value is also returned in result.
You can use %KEYVAL even if your key isn’t segmented.
Examples
The following subroutine creates a temporary tag file to process data from an ISAM file. It reads through the file searching for records with a nonblank entry in a nonkey field. It then creates a temporary tag file and saves the RFA position of the ISAM record with the nonblank field. It sorts the temporary file using the alternate segmented key as the sort key, then extracts the appropriate records from the ISAM file in sorted order to pass to a print subroutine.
subroutine report .define ISMCHN ,10 .define TAGCHN ,11 .define TAGFILE ,"tagfile" record ism_rec key0 ,a10 key1a ,a2 ism_fld ,a5 key1b ,d4 record tag_rec tag_rfa_1 ,a8 tag_rfa_2 ,a4 tag_sort ,a6 record group rfa ,a part1 ,a4 part2 ,a2 endgroup proc open(ISMCHN, i:i, "isam") open(TAGCHN, o, TAGFILE) repeat begin reads(ISMCHN, ism_rec, done1, getrfa:rfa) ;Read sequentially by primary key if (ism_fld) begin tag_sort=%keyval(ISMCHN, ism_rec, 1) tag_rfa_1=%hex(rfa.part1, 4) tag_rfa_2=%hex(rfa.part2, 2) writes(TAGCHN, tag_rec) end end done1, close TAGCHN sort(input=TAGFILE, key=tag_sort, record=tag_rec) open(TAGCHN, i, TAGFILE) repeat begin reads(TAGCHN, tag_rec, done2) rfa.part1=%x(tag_rfa_1) rfa.part2=%x(tag_rfa_2) read(ISMCHN, ism_rec, match:Q_RFA, rfa:rfa) xcall print_it(ism_rec) end done2, close TAGCHN close ISMCHN xreturn endsubroutine