PDA

View Full Version : Hochkommas in leeren Feldern eines Commands



Daechsle
30-04-13, 15:43
Hallo Welt

Aus einem Menü wird ein CL-Programm aufgerufen, das einen selbstgeschriebenen Befehl folgendermaßen aufruft:

CRTDOSDOC ??ARCID(&ARCID) ??TMPLID(&TPLID) ??TMPLNAM(&TPLNAM) ??DOSCLS(&DOSCLS) ??ABLAGE(&ABLAGE) ??DOCTYP(&DOCTYP) ??SECCOD(&SECCOD) ??NODID(&NODID)

Bei allen Variablen, die leer sind, d.h. nur Blanks enthalten, wird am Bildschirm ein in Hochkommas eingeschlossenes Leerzeichen angezeigt, z.B.:

Ablage . . . . . . . . . . . . . > ' '_____ Zeichenwert

Ich möchte aber, dass statt der Hochkommas gar nichts angezeigt wird, so wie es bei einem direkten Aufruf des Befehls (also ohne Programm) der Fall ist:

Ablage . . . . . . . . . . . . . ________ Zeichenwert

Warum ist das so und was kann man dagegen tun?

Egal ob ich die Variablen mit ' ' odr X'40' oder so vielen Blanks wie die Variable lang ist oder gar nicht initialisiere, die Hochkommas werden immer angezeigt.

Fuerchau
30-04-13, 16:31
Da lässt sich leider nichts gegen tun, da beim Prompt ja die Leerzeichen der Variable übergeben werden.

Alternative kann man im CMD per "PARM ... DFT(*NONE) ... SPCVAL((*NONE ' '))" den Leerwert ersetzen.
Dann wird halt *NONE angezeigt.

cbe
02-05-13, 14:42
Hallo,

und wenn Du &ABLAGE mit *N belegst?

CRTDOSDOC ??ARCID(&ARCID) ??TMPLID(&TPLID) ??TMPLNAM(&TPLNAM) ??DOSCLS(&DOSCLS) ??ABLAGE(*N) ??DOCTYP(&DOCTYP) ??SECCOD(&SECCOD) ??NODID(&NODID)

*N heißt so viel wie 'Parameter nicht angegeben'

Gruß,
Christian

Fuerchau
02-05-13, 15:34
Das Problem ist, dass *N vom CMD-Interpreter ausgewertet wird.
Packst du *N in eine Variable, wird '*N' angezeigt.

Man kann QCMDCHK verwenden.
QCMDCHK zeigt wie QCMDEXC den Befehl (falls gewünscht) an, liefert aber anschließend den geänderten Befehl zurück, der dann mit QCMDEXC ausgeführt werden kann.

Im QCMDCHK lässt man dann die nicht benötigten Parameter erst mal weg.

Nachteil:
Du musst den Befehl im CLP per *CAT erst zusammenbauen und leere Felder dann eben weglassen.

cbe
02-05-13, 16:05
Vielleicht denke ich ja zu einfach, aber sowas in der Art habe ich schon verwendet:


CL T5:
PGM PARM(&NAME)
DCL VAR(&NAME) TYPE(*CHAR) LEN(10)
?T5K ??NAME(&NAME)
ENDPGM

CMD T5K:
CMD PROMPT('Telefonsuche')
PARM KWD(FIRMA) TYPE(*CHAR) LEN(2) +
CHOICE('Firma') PROMPT('Firma')
PARM KWD(NAME) TYPE(*CHAR) LEN(30) PROMPT('Name +
oder TelNr')

call t5a ('x') --> x
call t5a (' ') --> ' '
call t5a ('x y') --> 'x y'
call t5a ('*N') --> ohne alles

Daechsle
27-05-13, 13:35
Mit '*N' funktioniert das wunderbar, dass nichts angezeigt wird, genau so wie ich es haben will.

Vielen Dank an alle Beteiligten!