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/

Reply via email to