I'm looking for some argument (ARG) such that this code:
A = 5
B = OCONV(A,'ARG5')
PRINT B
will print to the screen
00005
Anybody know something which will do this for me?
On
In Universe I would use the MR% conversion code. Just be aware that it will truncate anything longer than 5 characters.
A = 5
B = OCONV(A,'MR%5')
PRINT B
I use this a lot when I need to use EVAL in a conditional or as an aggregate function in a SQL or other TCL statement like to find the record with the most fields in a file.
SELECT MAX(EVAL "DCOUNT(@RECORD,@FM)") FROM VOC;
SELECT MAX(EVAL "OCONV(DCOUNT(@RECORD,@FM),'MR%8')") FROM VOC;
Masking aside these generally return 2 different values on our system.
I am using UniData, but looking at the commands reference manual I can't see anything quite right, in terms of one simple argument to OCONV, or similar. I came up with these (somewhat kludgy) alternatives, though:
NUMLEN=5 VALUE=5 PRINT CHANGE(SPACES(NUMLEN-LEN(VALUE))," ","0"):VALUEHere you are using the
SPACESfunction to create that amount of space characters and then convert them to zeros.PRINT OCONV(VALUE,"MR":NUMLEN:"(#####)")This is using
OCONVbut has to define a string with the "mask" to only shew the final 5 digits. So if NUMLEN changes then the mask string definition would have to change.PRINT OCONV(VALUE,"MR":NUMLEN)[3,NUMLEN]This version uses
OCONVbut prints starting at the 3rd character and shews the next NUMLEN characters, therefore trimming off the initial "0." that is made by using the "MR" parameter