The GET.NUM subroutine below has two examples that have worked great for me.
Richard Brown
NEGCHARS = '}.J.K.L.M.N.O.P.Q.R'
CONVERT '.' TO CHAR(254) IN NEGCHARS
XL.DEFERRAL.AMT = '100.23395.-33330.-44441.-55552.-66663'
CONVERT '.' TO CHAR(253) IN XL.DEFERRAL.AMT
NBR.X = DCOUNT(XL.DEFERRAL.AMT<1>,CHAR(253))
FOR X.LOOP.CNT = 1 TO NBR.X
X.INPUT.AMOUNT = XL.DEFERRAL.AMT<1,X.LOOP.CNT>
ORG.AMT = X.INPUT.AMOUNT
IF X.INPUT.AMOUNT < 0 THEN
GOSUB GET.NUM
END
PRINT ORG.AMT'R#10':' ':X.INPUT.AMOUNT
* X.AMOUNT.WRITE := FMT(OCONV(X.INPUT.AMOUNT,"MD"),"8\0R")
NEXT X.LOOP.CNT
STOP
***
GET.NUM: * CONVERT THE NUMBER IF NEEDED
***
X.INPUT.AMOUNT = ABS(X.INPUT.AMOUNT) ;*TO GET RID OF THE '-'
X.STR.LEN = LEN(X.INPUT.AMOUNT)
X.BYTE = X.INPUT.AMOUNT[X.STR.LEN,1]
* EXAMPLE 1
* X.INPUT.AMOUNT = X.INPUT.AMOUNT[1,X.STR.LEN-1]:NEGCHARS<X.BYTE+1>
* RETURN
* EXAMPLE 2
BEGIN CASE
CASE X.BYTE = 0
X.LAST.DIGIT = '}'
CASE 1
X.LAST.DIGIT = CHAR(73+X.BYTE)
END CASE
X.INPUT.AMOUNT = X.INPUT.AMOUNT[1,X.STR.LEN - 1]:X.LAST.DIGIT
RETURN
END
----- Original Message -----
From: "Coelho, Gregory" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Wednesday, January 18, 2006 9:54 AM
Subject: RE: [U2] RE: Number Conversion
> U2,
>
> In order to write to this format I have adjusted Colin's code coming up
> with the following SUBR:
>
> DETERMINE.NEGATIVE.VALUE: *ONCE IT HAS BEEN DETERMINED THAT THE AMOUNT
> IS NEGATIVE
>
> X.NUMBER = ""
> X.BYTE = ""
> X.STR.LEN = ""
> X.INPUT.AMOUNT = ""
>
>
> X.INPUT.AMOUNT = XL.DEFERRAL.AMT<1,X.LOOP.CNT> *THIS IS THE AMOUNT
> PULLED IN FROM THE TABLE
> X.INPUT.AMOUNT = NEG(X.INPUT.AMOUNT) *TO GET RID OF THE "-" SIGN
> X.STR.LEN = LEN(X.INPUT.AMOUNT)
> X.BYTE = X.INPUT.AMOUNT[X.STR.LEN,1]
>
>
>
> BEGIN CASE
> CASE X.BYTE = 0
> X.LAST.DIGIT = '}'
> CASE X.BYTE = 1
> X.LAST.DIGIT = 'J'
> CASE X.BYTE = 2
> X.LAST.DIGIT = 'K'
> CASE X.BYTE = 3
> X.LAST.DIGIT = 'L'
> CASE X.BYTE = 4
> X.LAST.DIGIT = 'M'
> CASE X.BYTE = 5
> X.LAST.DIGIT = 'N'
> CASE X.BYTE = 6
> X.LAST.DIGIT = 'O'
> CASE X.BYTE = 7
> X.LAST.DIGIT = 'P'
> CASE X.BYTE = 8
> X.LAST.DIGIT = 'Q'
> CASE X.BYTE = 9
> X.LAST.DIGIT = 'R'
> CASE 1
> X.LAST.DIGIT = X.BYTE
> END CASE
>
> X.NUMBER = X.INPUT.AMOUNT[1,X.STR.LEN - 1]:X.LAST.DIGIT
> X.AMOUNT.WRITE := FMT(OCONV(X.NUMBER,"MD"),"8\0R")
>
> THANKS AGAIN FOR ALL YOUR HELP!
>
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of Coelho, Gregory
> Sent: Tuesday, January 17, 2006 6:38 PM
> To: [email protected]
> Subject: RE: [U2] RE: Number Conversion
>
> Colin,
>
> Thanks for this bit of information - I've reworked it to write instead
> of read and it seems to be working like a champ. Thanks U2
>
> Greg
>
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of
> [EMAIL PROTECTED]
> Sent: Tuesday, January 17, 2006 10:48 AM
> To: [email protected]
> Subject: RE: [U2] RE: Number Conversion
>
> We used the following code to read the number. I think it's for the same
> comp-3 format - but you will have to verify and update the code to
> output the number rather than import it.
>
> Hth
> Colin Alfke
> Calgary, Canada
>
> SUBROUTINE CONVERT.AMOUNT(STRING)
> STR.LEN = LEN(STRING)
> NUMBER = ''
> NEGATIVE = 0
> BYTE = STRING[STR.LEN,1]
> BEGIN CASE
> CASE BYTE = '}'
> LAST.DIGIT = 0
> NEGATIVE = 1
> CASE BYTE = 'J'
> LAST.DIGIT = 1
> NEGATIVE = 1
> CASE BYTE = 'K'
> LAST.DIGIT = 2
> NEGATIVE = 1
> CASE BYTE = 'L'
> LAST.DIGIT = 3
> NEGATIVE = 1
> CASE BYTE = 'M'
> LAST.DIGIT = 4
> NEGATIVE = 1
> CASE BYTE = 'N'
> LAST.DIGIT = 5
> NEGATIVE = 1
> CASE BYTE = 'O'
> LAST.DIGIT = 6
> NEGATIVE = 1
> CASE BYTE = 'P'
> LAST.DIGIT = 7
> NEGATIVE = 1
> CASE BYTE = 'Q'
> LAST.DIGIT = 8
> NEGATIVE = 1
> CASE BYTE = 'R'
> LAST.DIGIT = 9
> NEGATIVE = 1
> CASE 1
> LAST.DIGIT = BYTE
> END CASE
> NUMBER = STRING[1,STR.LEN - 1]:LAST.DIGIT
> NUMBER = NUMBER + 0
> IF NEGATIVE THEN
> NUMBER = 0 - NUMBER
> END
> STRING = NUMBER
> RETURN
>
> >-----Original Message-----
> >From: Coelho, Gregory
> >
> >EEEK! Hummm, Is there anyone that can help me with number
> >conversion? I need to convert a negative monetary amount
> >pulled in by FMT(OCONV(X.AMOUNT, "MD"), "8\0R") to meet
> >S9(6)V99 or Z8.2 format.
> >COBOL programmers may recognize this comp-3 format - padded
> >with leading zeros the right most character must use an EBCDIC
> >symbol to reflect a negative amount:} = 0, J = neg. 1, K =
> >neg. 2, L = neg. 3 ... R = neg.
> >9. Any help or direction would be greatly appreciated.
> >
> >Thanks Gordon...
> -------
> u2-users mailing list
> [email protected]
> To unsubscribe please visit http://listserver.u2ug.org/
> -------
> u2-users mailing list
> [email protected]
> To unsubscribe please visit http://listserver.u2ug.org/
> -------
> u2-users mailing list
> [email protected]
> To unsubscribe please visit http://listserver.u2ug.org/
-------
u2-users mailing list
[email protected]
To unsubscribe please visit http://listserver.u2ug.org/