PDA

View Full Version : problem bei Call übergabe parameter numerisch gepackt



labm
03-07-08, 07:02
Hallo,
ich muss per CALL LIB/PGM (parm1 parm2 ...) programm aufrufen
das 2 parameter ist 8,0 numerisch gepackt

ich kann es mit CALL LIB/PGM (parm1 .x'01234567F' ...) aufrufen.

Die frage ob es irgendwie automatisch geht es umzusetzen

z. B.
30101134 --- > zu x'030101134F'

ich brauche die funktion umsetzung zahlen zu x'0123......

gibt es dazu built in funktion oder änliches oder beispiel PGM für die umsetzung.

christian_lettner
03-07-08, 07:25
Hallo

Habe das so gelöst:
CallPgm = 'call pgm(Prog) parm(X''0' + %editc(Feld:'X') + 'F'')'

mfg Chris

labm
03-07-08, 07:58
Das problem ist:

ich habe eine Zeichen folge

z.B. 'blabla12345678'
davon muss ich von stelle 7, 8 stellen extrahieren. dann ruffe per call pgm(xx) mit dieser parameter die länge dabei ist variabel

Aufgabenstellung:
'blabla12345678' von 7 stelle, 8 stellen lang

oder
blabla1234567' von 7 stelle, 7 stellen lang

Die übergabe mit %editc wird nicht funktionieren, da länge bekant ist bleibt aber variabel.
mfg

christian_lettner
03-07-08, 08:07
Hallo

Weißt du Beginn und Länge der Variable?

Dann mach einfach:
CallPgm = 'call pgm(Prog) parm(X''0' + %subst(Feld:Beginn:Länge) + 'F'')'

PS: bei gerader Anzahl der Länge musst du gegebenenfalls noch eine führende 0 einfügen.

Oder musst du Beginn und Länge der Variablen auch ermitteln?

mfg Chris

labm
03-07-08, 08:14
Um genau zu sagen:

von ist bekannt
Zeichen folge
'blablaAF/123456/15blabla'

was ich davon weiss ist di start position
i diesem fall 10 länge 7 vobei nur 6 stellenim diesem fall relevant sind dass heisst am ende muss es so aussehen x'0123456F' dal als übergabe 7,0 erwartet wird.

woki
03-07-08, 08:24
dann muß es so aussehen:
CallPgm = 'call pgm(Prog) parm(X''0' + %subst(Feld:10:6) + 'F'')'

labm
03-07-08, 08:58
wie es aussehen muss weiß ich. die frage wie kann mann es automatisieren und dabei veriabel bleiben.

unterprogramm mit übergabe parameter und rückgabe wert aufbereitet im gepacten hexa format.

übergabe parameter
parm 1 --> 123456
parm 2 ---> länge rückgabe 7,0
parm3 --> rückgabe wert x'0123456F'

oder
parm 1 --> 135,52
parm 2 ---> länge rückgabe 11,2
parm3 --> rückgabe wert x'00000013522F'

Fuerchau
03-07-08, 09:37
Definiere doch einfach ein Parameterfeld mit
d MyNum 8p 0
d MyRet 8p 0

im Code ermittle das erst numerische Zeichen und wandle um mit:
eval MyNum = %dec(substr(MyAlpha:sPos:rLen):8:0)

sPos = Startposition
rLen = Restlänge

Dann rufe das Programm einfach mit

CALL 'MYPROG'
PARM PARM1
PARM MyNum
PARM MyRet

auf.
Wenn du MyRet wieder alpha habe willst:
a) %char(MyRet) = linksbündig ohne Vornumm
b) %editc(MyRet:'X') = mit Vornullen