Anmelden

View Full Version : CL Programmierung Spalten erkennen...



linguin
23-08-16, 09:49
Hallo,

kann ich mit CL Spalten in einem String erkennen ?

Dh. Beispielstring:

1234 ABCS ZHDIK KHJHJDLK

Diesen String möchte ich jetzt in 4 Variablen

&VAR1 1234
&VAR2 ABCS
&VAR3 ZHDIK
&VAR4 KHJHJDLK

schreiben. Ist das mit CL möglich ? Trenner soll immer Leerzeichen sein.

Danke !!

Gruß Linguin

KingofKning
23-08-16, 11:55
Welches Release hast Du denn?

GG 5030

Einstein_69
23-08-16, 12:34
unter V7R1 versuche es mal hiermit.
DCL VAR(&c_str) TYPE(*char) LEN(2)
DCL VAR(&c_strOrg) TYPE(*char) LEN(1024)
DCL VAR(&n_posB) TYPE(*dec) LEN(4 0)
DCL VAR(&n_posE) TYPE(*dec) LEN(4 0)
DCL VAR(&n_len) TYPE(*dec) LEN(4 0)

chgvar &c_strOrg value('1234 ABCS ZHDIK KHJHJDLK')
chgvar &c_str value(' ')
chgvar &n_PosB value(0)
chgvar &n_PosE value(1)

dowhile (1=1)
chgvar &n_PosB value(%scan(&c_str &c_StrOrg &n_pose))
if cond(&n_posb = 0) then(leave)
if cond(&n_posb = &n_pose + 1) then(leave)

chgvar var(&n_len) value(&n_posb - &n_pose)

if cond(%sst(&var1 1 1)) = ' ') then(do)
chgvar var(&var1) value(%sst(&sec &n_posE &len))
chgvar var(&pose) value(&posb + 1)
iterate
enddo
if cond(%sst(&var2 1 1)) = ' ') then(do)
chgvar var(&var2) value(%sst(&sec &n_posE &len))
chgvar var(&pose) value(&posb + 1)
iterate
enddo
if cond(%sst(&var3 1 1)) = ' ') then(do)
chgvar var(&var3) value(%sst(&sec &n_posE &len))
chgvar var(&pose) value(&posb + 1)
iterate
enddo
if cond(%sst(&var4 1 1)) = ' ') then(do)
chgvar var(&var4) value(%sst(&sec &n_posE &len))
chgvar var(&pose) value(&posb + 1)
iterate
enddo
enddo

VG

KingofKning
23-08-16, 13:41
Hallo,
wenn du das nächste mal den Text eckige Klamme auf CODE eckige Klammer zu und später dann eckige Klamme auf /CODE eckige Klammer zu machst, bleibt auch die Formatierung erhalten.

GG 5030

Pikachu
23-08-16, 13:57
Oder vielleicht so?


PGM
DCL VAR(&L) TYPE(*DEC) LEN(5)
DCL VAR(&B) TYPE(*DEC) LEN(5) VALUE(1)
DCL VAR(&T) TYPE(*DEC) LEN(5) VALUE(0)
DCL VAR(&MAX) TYPE(*DEC) LEN(5) VALUE(100)
DCL VAR(&VAR1) TYPE(*CHAR) LEN(100)
DCL VAR(&VAR2) TYPE(*CHAR) LEN(100)
DCL VAR(&VAR3) TYPE(*CHAR) LEN(100)
DCL VAR(&VAR4) TYPE(*CHAR) LEN(100)
DCL VAR(&S) TYPE(*CHAR) LEN(100)

CHGVAR VAR(&S) VALUE('123456 7890 1234 567')

SUCHEN: CHGVAR VAR(&T) VALUE(&T + 1)
IF COND(&T *GT &MAX) THEN(GOTO CMDLBL(WEITER))
IF COND(%SST(&S &T 1) *NE ' ') THEN(GOTO CMDLBL(SUCHEN))

WEITER: CHGVAR VAR(&L) VALUE(&T - &B)

IF COND(&L *GT 0) THEN(DO)
CHGVAR VAR(&VAR1) VALUE(&VAR2)
CHGVAR VAR(&VAR2) VALUE(&VAR3)
CHGVAR VAR(&VAR3) VALUE(&VAR4)
CHGVAR VAR(&VAR4) VALUE(%SST(&S &B &L))
ENDDO
CHGVAR VAR(&B) VALUE(&T + 1)
IF COND(&B *LE &MAX) THEN(GOTO CMDLBL(SUCHEN))
ENDPGM: ENDPGM

kitvb1
24-08-16, 11:06
If the lengths are fixed, you could use this:

Dcl Var(&Spool_ID) Type(*Char) Len(82)
Dcl Var(&Job_Name) Type(*Char) Len(10) Stg(*Defined) +
DefVar(&Spool_ID 1)
Dcl Var(&User_Name) Type(*Char) Len(10) Stg(*Defined) +
DefVar(&Spool_ID 11)
Dcl Var(&Job_Number) Type(*Char) Len(6) Stg(*Defined) +
DefVar(&Spool_ID 21)
Dcl Var(&Splf_Name) Type(*Char) Len(10) Stg(*Defined) +
DefVar(&Spool_ID 27)
Dcl Var(&Splf_Nbr) Type(*Int) Stg(*Defined) +
DefVar(&Spool_ID 37)
Dcl Var(&Sys_Name) Type(*Char) Len(8) Stg(*Defined) +
DefVar(&Spool_ID 41)
Dcl Var(&Crt_Date) Type(*Char) Len(7) Stg(*Defined) +
DefVar(&Spool_ID 49)
Dcl Var(&Crt_Time) Type(*Char) Len(6) Stg(*Defined) +
DefVar(&Spool_ID 56)
Dcl Var(&OutQ_Name) Type(*Char) Len(10) Stg(*Defined) +
DefVar(&Spool_ID 62)
Dcl Var(&OutQ_Lib) Type(*Char) Len(10) Stg(*Defined) +
DefVar(&Spool_ID 72)

Dcl Var(&Spl_ID_Len) Type(*Int)

DCLF FILE(SPLFLAYOUT) OPNID(INREC)