Table of Contents

RTP Series - RTP16

Published ByDateVersionKnowledge LevelKeywords
Sprezzatura Ltd01 JUN 19891.13+EXPERTRTP16, XLATE

The XLATE processor. This is actually a very useful tool for more than just standard extractions of descriptions from code files et al. The full syntax of XLATE is

     XLATE(file,rec,field,action,levels.drop)

and it is the variants of field that make this function more powerful than it might at first seem. To deal with the options in turn:

OptionDescription
filethis can be a literal or a variable (but not a file variable). It can also be a dict file.
recthis is the key of the record that is to be extracted from the file. It can be any valid expression and it can be multivalued. If it is multivalued all of the records specified will be read and the values returned in a multivalued array.
fieldsee "field" description below
actioncan be X or C. X means return null if record not found, C means return the ID. Note that omitting X and C will be treated as a C.
levels.dropsee "levels.drop" description below

Field Description

Field can be of four types:

Field TypeDescription
Numberthis just returns the field specified from the record and is the standard use for XLATE.
Zerothis does not return a field but rather returns the key. This is VERY useful in conjunction with the X action code. If we request a field number in place of a 0 we have no way of knowing if the record was on file or not as with an X a "" would be returned if the field was null OR if the record did not exist. With a field number of 0 we can perform a Verifile operation easily. If the record is there the id will be returned, if it is not on file a "" will be returned E.G.

IF NOT(XLATE("CODES",@ANS,0,"X")) THEN CALL MSG("Code not found","","","")
Null ("")this returns the entire record instead of a field. It can be used to save having to open a file for a quick one off utility program or used in conjunction with the levels.drop (q.v.) it can form a quick way of taking entire records to form a multivalued array (e.g. for stuffing a popup etc.). If we set levels.drop to 1, the record will be returned as a multivalued array and thus require no further processing to treat as a multivalue. E.G.

POP.LIST=XLATE("LISTS","TEMP","","X",1)
IF POP.LIST THEN
WRITEV POP.LIST ON POPS,ID,4
Field Namecan be used in place of field number and is more readable although slower. Has the great advantage that it can be used to extract symbolics.

Levels.Drop Description

The Levels.Drop parameter tells the system how to treat delimiters found in the field/record being XLATED to. This could be useful in the above example where we extracted an entire record using a null field as it changed the field marks to value marks (and of course any value marks to sub-value marks). It is also very useful when XLATEing from a multivalued field to a multivalued field. This is best illustrated by reference to a list statement - in this example every record on the main file can store multiple parts. Every part is available in a number of colours. The symbolic Colour.Choice simply extracts the corresponding choices from the parts file. Firstly using

@ANS=XLATE("PARTS",{PNO}, "COL","X")

we get

            Key.. Parts................    Colour Choice
            1     P123                     Red
                  P200                     Blue
                  P300                     Green
                  P400                     Yellow
                  P563                     Purple
                  P789                     Blue
                                           Red
                                           Green
                                           Lilac
                                           Cyan

Now using

               @ANS = XLATE("PARTS",{PNO},"COL" ,"X",1)

we get

            Key..     Parts............    Colour Choice
            1         P123                 Red
                                           Blue
                      P200                 Green
                      P300                 Yellow
                                           Purple
                                           Blue
                      P400                 Red
                      P563                 Green
                      P789                 Lilac
                                           Cyan

a much more meaningful list because the multivalues in the target have been dropped one level to sub-values and the LIST processor recognises this.

Note that under certain circumstances XLATEs can be more efficient than straightforward READs as they have their own buffers in the FRAME array.

(Volume 1, Issue 2, Pages 5-7)