|ITypeDictItem||A valid virtual attribute. Must be a compiled I-type in the dictionary opened as @DICT.|
The CALCULATE function evaluates an itype expression defined in a dictionary item against data in an MVBasic program and returns the result.
CALCULATE reads the dictionary item ITypeDictItem from the file opened to the @DICT variable. It then evaluates the itype expression defined in attribute 2 of the dictionary item, using the data in @ID and @RECORD. Calculate also sets the @CONV, @FORMAT, and @HEADER system variables to attributes 3, 5, and 4 of the dictionary item respectively. These can be used with the OCONV and FMT functions to format the results of CALCULATE.
Before using CALCULATE you must open a file to the @DICT system variable, and assign values to @ID and @RECORD. If the itype expression uses other @variables (for example @FILE.NAME) then these need to be set as well.
CALCULATE and ITYPE Compared
The CALCULATE function is similar to the ITYPE function:
The ITYPE function argument is a variable into which a dictionary item has already been read, or an itype expression assigned. The ITYPE function allows on-the-fly creation of itype expressions
The CALCULATE function argument must be the name of an existing dictionary item which will be read by the function.
The following example opens the Myfile file to the item variable, and the Myfile dictionary to the @DICT special variable. It then reads through the item variable by @ID, and uses CALCULATE to calculate a total of the records in item. CALCULATE also sets values for the @CONV and @FORMAT system variables used by the OCONV and FMT functions.
OPEN 'Myfile' TO item ELSE STOP 201,'MyFile' OPEN 'DICT','Myfile' TO @DICT ELSE STOP 201,'DICT MyFile' SELECT item TO 0 LOOP WHILE READNEXT @ID FROM 0 DO READ @RECORD FROM item,@ID total += CALCULATE(amt_due) REPEAT convtotal = OCONV(total,@CONV) fmttotal = FMT(convtotal,@FORMAT) PRINT fmttotal END