Avatar billede wizaxjb Nybegynder
11. januar 2005 - 11:06 Der er 3 kommentarer og
1 løsning

Behandling af parametre i CL

Hej.

Jeg har et problem med en parameter til mit CL program...

som parameter får jeg en streng (*CHAR) ind på 200 tegn.

Denne parameter består af både *CHAR felter og packed Numeriske felter (eks. 020F HEX= 20).

Hvordan får jeg trukket det packed felt ud i en *CHAR variabel (med korrekt indhold 020 eller 20 i ovenstående tilfælde).

Jeg takker på forhånd for hjælpen!
Avatar billede kjulius Novice
18. januar 2005 - 22:59 #1
Tja, så er du lidt uheldig, for det er en af den slags opgaver, som ikke kan laves i CL.

Det absolut letteste er at lave et RPG program i stedet. Så kan du definere en datastruktur, som opdeler strengen i felter, som derefter kan behandles uden problemer.

Evt. kan du lave RPG (eller C/C++ eller COBOL) program som kaldes fra dit CL og klarer opgaven, hvorefter den returnere den numeriske værdi i en anden parameter.
Avatar billede kjulius Novice
21. januar 2005 - 01:19 #2
Må jeg have lov at spørge om, hvorfor det skal gøres i CL?
Avatar billede kjulius Novice
10. februar 2005 - 02:23 #3
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.htm

Desvæ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...
Avatar billede wizaxjb Nybegynder
18. februar 2005 - 12:06 #4
Undskyld forsinkelsen... min ændring af email er åbenbart ikke slået igennem :-(

Jeg takker for forslagene, og vil straks imlementere dem i et standard-program til vores program-pakke...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester