View Full Version : CL Variable Leerzeichen entfernen / ersetzen
Moin,
stehe hier vor einem, für mich, größerem Problem :confused:
Ich habe eine Char Variable in einem CL
'XXX 45 77 99 GG TT'
diese brauche ich aber OHNE diese lästigen Leerzeichen
also als
'XXX457799GGTT'
Substr haut nicht hin da die Leerzeichen an verschiedenen Stellen stehen können
Habt Ihr nen CL Codeschnipsel für mich der das tut ?
Danke für Eure Mühe
Gruß aus dem sonnigen Frankenland
S.Neinawaie
09-03-12, 07:31
Hallo!
Wenn es wirklich in CL sein muss dann gibt es (soweit ich weiß) nur eine Möglichkeit:
Scan for String Pattern (QCLSCAN) API
in Kombination mit SubString. (%sst)
Beispiel von QCLSCAN: How to scan a char? (http://www.code400.com/forum/showthread.php/3051-How-to-scan-a-char)
LG,
Sam
Nachtrag:
Hab auf die schnelle (wenn mein Chef wüsste..) was kleines gebaut, es ist nicht schön, nicht gut überlegt, aber es funktioniert :D
PGM
DCL VAR(&RESULT) TYPE(*CHAR) LEN(999)
DCL VAR(&STRING) TYPE(*CHAR) LEN(999) VALUE('XXX +
45 77 99 GG TT')
DCL VAR(&STRLEN) TYPE(*DEC) LEN(3) VALUE(999)
DCL VAR(&STRPOS) TYPE(*DEC) LEN(3) VALUE(1)
DCL VAR(&PATTERN) TYPE(*CHAR) LEN(999) VALUE(' ')
DCL VAR(&PATLEN) TYPE(*DEC) LEN(3) VALUE(1)
DCL VAR(&TRANSLATE) TYPE(*LGL)
DCL VAR(&TRIM) TYPE(*LGL)
DCL VAR(&WILDCARD) TYPE(*CHAR) LEN(1)
DCL VAR(&RETURN) TYPE(*DEC) LEN(3)
DCL VAR(&LEN) TYPE(*DEC) LEN(3)
ANFANG: CALL PGM(QCLSCAN) PARM(&STRING &STRLEN &STRPOS +
&PATTERN &PATLEN &TRANSLATE &TRIM +
&WILDCARD &RETURN)
IF COND(&RETURN *GT 0) THEN(DO)
CHGVAR VAR(&LEN) VALUE(&RETURN - &STRPOS)
IF COND(&LEN *EQ 0) THEN(GOTO ENDE)
CHGVAR VAR(&RESULT) VALUE(&RESULT *TCAT %SST(&STRING &STRPOS &LEN))
CHGVAR VAR(&STRPOS) VALUE(&STRPOS + &LEN +1)
GOTO ANFANG
ENDDO
ENDE: ENDPGM
Probier mal so:
PGM
DCL VAR(&POS) TYPE(*DEC) LEN(5) VALUE(1)
DCL VAR(&POS2) TYPE(*DEC) LEN(5) VALUE(1)
DCL VAR(&LEN) TYPE(*DEC) LEN(5) VALUE(20)
DCL VAR(&VAR) TYPE(*CHAR) LEN(20)
DCL VAR(&VAR2) TYPE(*CHAR) LEN(20)
CHGVAR VAR(&VAR) VALUE('XXX 45 77 99 GG TT')
LOOP: IF COND(%SST(&VAR &POS 1) *NE ' ') THEN(DO)
CHGVAR VAR(%SST(&VAR2 &POS2 1)) VALUE(+
%SST(&VAR &POS 1))
CHGVAR VAR(&POS2) VALUE(&POS2 + 1)
ENDDO
CHGVAR VAR(&POS) VALUE(&POS + 1)
IF COND(&POS *LE &LEN) THEN(GOTO CMDLBL(LOOP))
CHGVAR VAR(&VAR) VALUE(&VAR2)
ENDPGM: ENDPGM
Warum eignetlich so kompliziert?
In einer kleinen Schleife einfach per TCAT die Zeichen anhängen:
chgvar(&Neu) value(&neu *tcat %sst(&Alt &Pos 1))