Anmelden

View Full Version : Cobol Makro in RPG4 umschreiben



MederA
23-02-18, 14:37
Hallo,

ich möchte ein Cobol Makro in RPG4 umschreiben. Dabei bin ich auf ein Problem gestoßen, was mir auch die Kollegen nicht beantworten konnten:

Folgendes soll Umgeschrieben werden:



01 USER-AREA PIC X(32000).


01 ABC-USER-AREA REDEFINES USER-AREA.


02 DDA-REC.

03 DDA-SEQUENZ-AREA.
05 DDA-SDADIUB.

06 FILLER PIC X(01).

06 DDAPFMA PIC 9(03).


Kann mir hier vielleicht jemand dazu helfen?

Das unter der 01er Stufe von ABC-USER-AREA wird eine DS.. das weis ich, aber ich bin ein wenig Aufgeschmissen, was nun das 32.000 Alphanumerische Feld angeht.

Liebe Grüße
Andrea

KingofKning
23-02-18, 15:47
Ich will ja nix sagen, aber Dein Redefine hat nur 4 Stellen. Da fehlt doch noch entweder ein occurs oder sonst was. So gibt das nichts. (Schon in Cobol nicht)

GG 4481

Fuerchau
23-02-18, 16:02
Gehen tut sowas schon, auch in COBOL, da man nicht alles redefinieren muss.
RPGLE:

dcl-ds DDA_SDADIUB qualified template;
filler char(1);
DDAPFMA zoned(3, 0);
endds;

dcl-ds DDA_SEQUENZ_AREA quliefied template;
DDA_SDADIUB likeds(DDA_SDADIUB);
endds;

Nun, den DDA-REC spare ichmir auf.

dcl-ds USER_AREA qualified char(32000);
ABC_USER_AREA likeds(DDA_SEQUENZ_AREA);
endds;

Die Ansprache der Felder ist dann etwas komplizierter:
USER_AREA.ABC_USER_AREA.DDA_SDADIUB.DDAPFMA

Nun kann man sich das aber auch etwas einfacher machen (alte Syntax):
d USER_AREA ds
d AreaData 32000

d UserAreaPtr s * inz(USER_AREA)

d DDA_SDADIUB ds qualified based(UserAreaPtr)
d filler 1
d DDAPFMA S 3 0

KingofKning
23-02-18, 16:23
Ich habe nicht gesagt das das nicht geht, sondern das das nichts gibt.

Macht ja keinen Sinn ein Feld mit 32.000 Stellen zu definieren und dann nur 4 zu benutzen.
Ich hätte dann der Ordnunghalber ein Filler mit Pic X(31996) erwartet.

Aber egal irgendeinen Sinn mag es haben.

MederA
23-02-18, 17:15
Danke schön!

@KingofKning (http://newsolutions.de/forum-systemi-as400-i5-iseries/members/5106-KingofKning) Danke für die Anmerkung :) Es ist nur ein Ausschnitt der Ganzen Sache.. Wäre einfach zu viel Code geworden und es ging mir nur um den Abschnitt, wie ich den Rest dann mit drunter häng weis ich :)

Pikachu
26-02-18, 11:25
Probier's mal so:


D DS
DUSERAREA 32000A
DABCUSERAREA OVERLAY(USERAREA)
DDDAREC OVERLAY(ABCUSERAREA)
DDDASEQUENZAREA OVERLAY(DDAREC)
DDDASDAIUB OVERLAY(DDASEQUENZAREA)
DFILLER 1A OVERLAY(DDASDAIUB)
DDDAPFMA 3S 0 OVERLAY(DDASDAIUB:*NEXT)