2

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?

Charles
  • 355
  • 1
  • 2
  • 12

3 Answers3

3

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.

Van Amburg
  • 1,207
  • 9
  • 15
0

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"):VALUE

Here you are using the SPACES function to create that amount of space characters and then convert them to zeros.

PRINT OCONV(VALUE,"MR":NUMLEN:"(#####)")

This is using OCONV but 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 OCONV but 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

Tim the Enchanter
  • 10,837
  • 4
  • 21
  • 20
0

PADDED.VALUE = VALUE 'R%5' is the simplest way to do this.

ouflak
  • 2,458
  • 10
  • 44
  • 49
Asvin
  • 1