How to convert a numeric field to an absolute value?
To generate the absolute value of a numeric field to be compatible which character edit patterns, use the COMBINE BITS function.
For example:
Dataname is defined as POSNEG 3 NU
A value of POSNEG is read in as hex F0F1D2', which is a negative 12. If moved to a character field, this would display as '01K'.
What we want is to manipulate the field to hex'F0F1F2', so it displays as '012'.
You can't just multiply the field by -1 because the input data from another record may already be positive.
However, if you use COMBINE BITS where the first parameter is positive 0 (x'F0') defined for the length of your dataname, and logically 'OR' it with your dataname, you will always get the absolute value of your data.
In our example, because POSNEG is 3 bytes long we pad with 2 bytes of 0's and use this command:
COMBINE BITS X'0000F0' OR POSNEG
This performs a OR on the 2 parameters:
0000 0000 0000 0000 1111 0000 < x'0000F0' 1111 0000 1111 0001 1101 0010 < x'F0F1D2' ------------------------------------------- 1111 0000 1111 0001 1111 0010 < x'F0F1F2'
This achieves the desired results of converting POSNEG to display as '012' which can be successfully moved into a character edit pattern.
For more information please see the section on COMBINE BITS in Chapter 10 of the VISION:Results Reference Guide