%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
