PDA

View Full Version : Cobol: Alpha Feld in Numerisch



schatte
15-07-09, 12:11
Hallo Leute,

ich habe in einem ILE Cobol Programm (V4R5 - V5R4) eine PIC X(22) Variable, welche einen 22 stelligen numerischen Wert enthält z.B. "1231082301102028301229". Wenn ich diese alpha Variable nun eine PIC 9(22) Variable schiebe und mir anschließend den Wert der numerischen Variable anschaue, bekomme ich den Wert 0000082301102028301229. Es werden also anscheinend nur 17 Ziffern übernommen, obwohl es 22 sind.

Beispiel Cobol Code:


01 STRING-WRK PIC X(22).
01 ZAHL-WRK PIC 9(22).
*------------------------------------------
LINKAGE SECTION.
*------------------------------------------
*------------------------------------------
PROCEDURE DIVISION.
*------------------------------------------
STEUER SECTION.
ANFANG.

MOVE "1231082301102028301229" TO
STRING-WRK.
MOVE STRING-WRK TO ZAHL-WRK.
Mit RPG klappt das ganze:


D zeichen S 22
D numerisch S 22 0
C Eval zeichen = '1231082301102028301229'
C MOVE Zeichen numerisch
C Eval *INLR=*On
Wo liegt hier das Problem?

Gruß
Matthias

akorb
15-07-09, 12:51
Hallo,

lt. Handbuch kann Cobol in einem numerischen Feld 18 Stellen verarbeiten.

Gruss
akorb

Pikachu
15-07-09, 12:57
Läßt sich das Programm so wirklich wandeln? Ich erhalte hier die Nachricht LSC1210 im SEU und LBL1210 beim Wandeln.

DSPMSGD RANGE(LSC1210) MSGF(QDEVTOOLS/QLSCMSG)
DSPMSGD RANGE(LBL1210) MSGF(QDEVTOOLS/QLBLMSG)

LBL1210:

Nachricht . . . : PICTURE-Zeichenfolge überschreitet maximal zulässige Länge von 18 Ziffern. Klausel PICTURE ignoriert.
Fehlerbeseitigung: Die Klausel PICTURE darf - einschließlich der für das Zeichen P und für gleitende Einfügungszeichen reservierten Ziffernpositionen - eine Länge von 18 Ziffern nicht überschreiten.

Fuerchau
15-07-09, 13:09
Gib beim Umwandeln die Option
CRTBNDCBL ... ARITHMETIC(*EXTEND31)
an, dann müssste es klappen.

Laut ANSI darf COBOL nur 18 signifikante Ziffern verarbeiten.

Pikachu
15-07-09, 13:35
Achso. Als ILE COBOL läßt es sich wandeln.

Und so klappt das auch 22stellig:

01 STRING-WRK PIC X(22).
01 ZAHL-WRK-R REDEFINES STRING-WRK.
05 ZAHL-WRK-2 PIC 9(22).

schatte
15-07-09, 17:12
Gib beim Umwandeln die Option
CRTBNDCBL ... ARITHMETIC(*EXTEND31)
an, dann müssste es klappen.

Laut ANSI darf COBOL nur 18 signifikante Ziffern verarbeiten.
Mit ARITHMETIC(*EXTEND31) hat es geklappt.

Danke.