PDA

View Full Version : CL Variable Leerzeichen entfernen / ersetzen



linguin
09-03-12, 06:59
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

Pikachu
09-03-12, 08:32
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

Fuerchau
10-03-12, 08:54
Warum eignetlich so kompliziert?

In einer kleinen Schleife einfach per TCAT die Zeichen anhängen:

chgvar(&Neu) value(&neu *tcat %sst(&Alt &Pos 1))