× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



This didn't work, Jim - data type mismatch.&CHAR has to be a string representation of a number, not a hex value.

But something close can be done with %BIN. This becomes the same problem as displaying the hex-equivalent of a string, which has been solved before. Don't know if my solution is the same.

Negative numbers are not covered here - need to check for value of last nybble of last byte. And number of decimals needs to be known ahead of time.

===========================================================
PGM
/* */
/* --------- Define program file(s) and variable(s). --------------- */
/* */
DCL VAR(&CHAR) TYPE(*CHAR) LEN(8) +
VALUE(X'123456789012345F')
/*---------this is your incoming */
DCL VAR(&NUM155) TYPE(*DEC) LEN(15 5)
DCL VAR(&NUMBER) TYPE(*CHAR) LEN(17)

DCL VAR(&COUNTER1) TYPE(*DEC) LEN(3 0) VALUE(1)
DCL VAR(&COUNTER2) TYPE(*DEC) LEN(3 0) VALUE(1)
DCL VAR(&BYTES2) TYPE(*CHAR) LEN(2) VALUE(X'0000')
DCL VAR(&CHAR1) TYPE(*CHAR) LEN(1)
DCL VAR(&DEC1) TYPE(*DEC) LEN(1 0)
DCL VAR(&DEC3) TYPE(*DEC) LEN(3 0)
/* */
/* --------- Change character value to a 15,5 and then to 7,2 ------ */
/* */
LOOP1:
/* Binary value of packed byte */
CHGVAR VAR(%SST(&BYTES2 2 1)) VALUE(%SST(&CHAR +
&COUNTER1 1))
CHGVAR VAR(&DEC3) VALUE(%BIN(&BYTES2))
/* 1st digit */
CHGVAR VAR(&DEC1) VALUE(&DEC3 / 16)
CHGVAR VAR(&CHAR1) VALUE(&DEC1)
CHGVAR VAR(%SST(&NUMBER &COUNTER2 1)) VALUE(&CHAR1)
CHGVAR VAR(&COUNTER2) VALUE(&COUNTER2 + 1)
/* 2nd digit */
IF COND(&COUNTER2 < 16) THEN(DO)
CHGVAR VAR(&DEC1) VALUE(&DEC3 - (&DEC1 * 16))
CHGVAR VAR(&CHAR1) VALUE(&DEC1)
CHGVAR VAR(%SST(&NUMBER &COUNTER2 1)) VALUE(&CHAR1)
ENDDO

CHGVAR VAR(&COUNTER1) VALUE(&COUNTER1 + 1)

IF COND(&COUNTER1 <= 8) THEN(DO)
CHGVAR VAR(&COUNTER2) VALUE(&COUNTER2 + 1)
GOTO CMDLBL(LOOP1)
ENDDO

CHGVAR VAR(&NUMBER) VALUE(' ' *CAT %SST(&NUMBER 1 +
10) *CAT '.' *CAT %SST(&NUMBER 11 5))
CHGVAR VAR(&NUM155) VALUE(&NUMBER)

ENDPGM
======================================================

If you debug this and set a breakpoint at the last statement, &NUM155 will be 1234567890.12345

Vern

At 01:30 PM 2/3/2003 -0600, you wrote:
Bill,

You can try this in your CL, I believe it will work.....unless I am not
understanding what you are trying to do.

/*                                                                   */
/* --------- Define program file(s) and variable(s). --------------- */
/*                                                                   */
             DCL        VAR(&CHAR       ) TYPE(*CHAR) LEN(  11)
<----------this is your incoming
             DCL        VAR(&NUM155     ) TYPE(*DEC ) LEN(15 5)
             DCL        VAR(&NUMBER     ) TYPE(*DEC ) LEN( 7 2)
/*                                                                   */
/* --------- Change character value to a 15,5 and then to 7,2 ------ */
/*                                                                   */
             CHGVAR     VAR(&NUM155   ) VALUE(&CHAR  )
             CHGVAR     VAR(&NUMBER   ) VALUE(&NUM155)

Jim


-----Original Message-----
From: bill.reger@convergys.com [mailto:bill.reger@convergys.com]
Sent: Monday, February 03, 2003 12:18 PM
To: Midrange-L@midrange.com
Subject: Packed (*CHAR) to Numeric (*DEC) in CLP


Can anyone tell me how (in a CLP) to convert a *CHAR declared variable
containing a packed numeric value into a *DEC declared variable?

Bill


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.