wizaxjb, er du der?
Hvis du insisterer på, at det skal gøres i CL, så findes der i TAATOOLS en kommando der hedder MOVCHRDEC, som kan konvertere fra en pakket decimalværdi indeholdt i en *CHAR streng.
http://www.taatool.com/document/L_movchrdec.htmDesværre skal man købe hele pakken (som ikke er billig - okay, alt er selvfølgelig relativt, men en mindstepris på omkring $1000 for en P05 maskine, synes jeg er lidt pebret, medmindre du har brug for mere end en lille del af pakkens indhold).
Det er naturligvis også muligt selv at lave en sådan kommando, som vil kunne hjælpe dig i CL, men selve konverteringen er næsten umuligt at lave i CL, så den CPP en sådan kommando skulle bruge vil være nødt til at være et program lavet i et rigtigt højniveau-sprog.
Men da jeg går ud fra, at grunden til at du ikke ønsker at gøre brug af et rigtigt højniveau-sprog til dette er, at der ikke er installeret sådanne på din maskine, så:
Der er muligvis også en anden måde, som dog involverer et kald til et andet program, men dette program kunne også være et CL program:
Lav et selvstændigt lille program med tre parametre:
PGM PARM(&INPUT &OUTPUT &BYTES15)
DCL &INPUT *CHAR 8
DCL &OUTPUT *CHAR 8
DCL &BYTES15 *DEC (15 5)
DCL &BYTES *DEC (3 0)
CHGVAR &BYTES &BYTES15
CHGVAR %SST(&OUTPUT 1 &BYTES) %SST(&INPUT 1 &BYTES)
ENDPGM
Det eneste dette lille progam gør, er at kopiere indholdet af &INPUT til &OUTPUT.
Det interessante kommer når man kalder dette lille program. CL har ingen type check på overførte programparametre. Man kan derfor sagtens overføre en decimal-værdi som en streng (og omvendt, selvom det sikkert ville give en fejl, så snart man begyndte at bruge variablen).
Hvis vi nu kaldte dette lille program for DECCVT, kunne du f.eks. gøre sådan i dit kaldende program.
DCL &DEC3 *DEC (3 0)
/* Konverter en delstreng på 2 bytes til en pakket dec på 3 cifre og 0 decimaler */
CALL DECCVT PARM(%SST(&RECORD 3 2) &DEC3 2)
Med en strenglængde på 8 bytes, vil du kunne komme op på en pakket dec længde på 15. Hvis nogen af dine decimal variable er længere end det, vil du skulle ændre i programmets parameter længder.
Grunden til at jeg har defineret programmets parameter til overførsel af længden som dec(15 5) er, at så behøver man ikke at overføre værdien som en variabel, men kan medsende den som en konstant (numeriske konstanter bliver automatisk konverteret til en decimal variabel på 15,5.
Jeg håber dette kan hjælpe dig lidt på vej...