View Full Version : problem bei Call übergabe parameter numerisch gepackt
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
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
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.
dann muß es so aussehen:
CallPgm = 'call pgm(Prog) parm(X''0' + %subst(Feld:10:6) + 'F'')'
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'
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