|
|||||||
RTP Series - RTP16The 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: file this can be a literal or a variable (but not a file variable). It can also be a dict file. rec this 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. field this can be of four types: Number this just returns the field specified from the record and is the standard use for XLATE. Zero this 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 Name can 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. action can 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 an C. levels.drop this 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) |
|||||||
| |||||||