Anmelden

View Full Version : Datenstrukturen im free-format deklarieren



Seiten : [1] 2

kretzsch
12-02-15, 13:34
Hallo Zusammen,

ich habe alle Felder einer Datei (THFUWSTL02) als Datenstruktur definiert:

dcl-c #dssatz const('THFUWSTL02');

dcl-ds #tfwsatz1 extname(#dssatz)end-ds;


Nun möchte ich einzelne Felder der gleichen Datei als "Unterdatenstruktur" definieren, leider gelingt es mir nicht.
Wie muss ich es machen?


Danke für eure Hilfe

Fuerchau
12-02-15, 13:41
1. DS mit Qualified definieren, in 2. DS mit LIKEDS(1.DS) dann einbetten.

kretzsch
12-02-15, 13:44
Oh Gott,
kannst du an meinem Beispiel es genauer beschreiben? Z.B. will ich feld1 und feld9 der Datei THFUWSTPU in die 2.Struktur bringen.

Fuerchau
12-02-15, 14:20
Ok, jetzt wird's klarer was du willst.
Feldnamen sind in RPG grundsätzlich eindeutig und können nicht mehrfach definiert werden.
Mittels "qualified" auf DS-Ebene wird aus "FELD" dann immer "DSNAME.FELD".
Um also den selben Namen mehrfach zu verwenden muss qualified verwendet werden.

(ich benutze immer noch die alte Syntax):

D MyDS DS qualified extname(MyFile)

D MyDS2 DS
D FELDX like(MyDs.FELDX)

D MyDS3 DS qualified
D FELDX like(MyDs.FELDX)

D MyDS4 DS qualified
D MyDS likeDS(MyDs)

Du hast nun das Feld FEDLX als Einzelfeld nur in der MyDS2.
In MyDS3 heißt das Feld nun "MyDS3.FELDX" und in MyDS4 nun "MyDS4.MyDS.FELDX".

Ich hoffe, ich konnte zu deiner Verwirrung beitragen.

kretzsch
13-02-15, 08:00
Vielen Dank, aber ....

genau um die "neue Syntax" sprich free-Bestimmungen geht es mir.

dcl-ds #tfwsatz1 extname(#dssatz) qualified;

schachtel ich hier die 2.DS ein und wie?

end-ds

B.Hauser
13-02-15, 08:15
Mir ist immer noch nicht ganz klar was Du willst.
Vielleicht kannst Du die Datenstruktur, so wie Du Dir sie vorstellst mal im Fix-Format posten.

Hier ist ein Beispiel einer externen Datenstruktur, in der einzelne Felder umbenannt bzw. intialisiert wurden. Zunächst im klassischen und dann im Free-Format-


D ExtDSOrderHdr...
D E DS ExtName('ORDERHDRX')
D OrdCustNo E ExtFld(CustNo)
D Company E ExtFld('COMPANY') inz(10)
D DelDate E ExtFld(DelDate) inz(*SYS)


DCL-C ConstDelDate Const('DELDATE');

DCL-DS ExtDSOrderHdr EXTNAME('ORDERHDRX');
OrdCustNo ExtFld('CUSTNO');
Company ExtFld('COMPANY') inz(10);
DelDate ExtFLd(ConstDelDate) inz(*SYS);
End-DS;


Ansonsten kann man im Free-Format mit dem Schlüssel-Wort OVERLAY keine kompletten Datenstrukturen (sondern nur Unter-Felder) überlagern, sondern muss mit Hilfe des Schlüssel-Wortes POS die Start-Position angeben.

Birgitta

camouflage
13-02-15, 08:55
Ich denke, er will eine Datenstruktur befüllen, referenziert auf die Erste, die nur die zwei entsprechenden Felder enthält. So versteh ich es.

Also:

DCL-DS zweiteDS;
Field1 like(Feld1)
Field9 like(Feld9)
END-DS

Man könnte nun evtl. mit Pointern (Dieter bekommt gleich wieder graue Haare :-)) oder Referenzen ala Baldur arbeiten - aber warum so kompliziert (die Nachfolger werden es danken):

Datenstruktur definieren, zwei "EVALS" und gut ist.

Just my 2cts.

B.Hauser
13-02-15, 09:05
Allerdings darf in solchen Fällen das neue Feld nicht wie das Referenz-Feld heißen.

Sofern die Referenz-Datenstruktur qualifiziert ist, sieht die Syntax so aus:


DCL-DS ZweiteDS Qualified;
Field1 Like(RefDS.Field1);
Field2 Like(RefDS.Field2);
End-DS;

Sofern die Subfields gleich heißten, benötigt man auch keine 2 (oder wieviel auch immer EVALS/MOVES), sondern EVAL-CORR überträgt alle gleichnamigen Unter-Felder.

Birgitta

Fuerchau
13-02-15, 11:07
Das ist ja häufig das Problem, dass ein Feldname in einer nicht-qualified-DS nur 1 Mal vorkommen darf. Ein implizit definiertes Feld (gibt's in Free ja nicht mehr) darf in keiner DS stehen.
Mit Qualified ist man auf der sicheren Seite (COBOL hat das schon immer) und bei EVAL-CORR werden gleiche Feldnamen übertragen.

BenderD
13-02-15, 12:05
Ich denke, er will eine Datenstruktur befüllen, referenziert auf die Erste, die nur die zwei entsprechenden Felder enthält. So versteh ich es.

Also:

DCL-DS zweiteDS;
Field1 like(Feld1)
Field9 like(Feld9)
END-DS

Man könnte nun evtl. mit Pointern (Dieter bekommt gleich wieder graue Haare :-)) oder Referenzen ala Baldur arbeiten - aber warum so kompliziert (die Nachfolger werden es danken):

Datenstruktur definieren, zwei "EVALS" und gut ist.

Just my 2cts.

ad 1) graue Haare sind in meinem Alter keine Schande
ad 2) Baldur wäre froh, wenn er noch ein paar graue Haare dazu bekäme
ad 3) Pointer helfen hier nicht weiter, da Datenstrukturen Speicherbeschreibung sind
ad 4) ich bewundere den feinsinnigen Humor der RPG Entwickler, was den Namen Datenstruktur angeht.

D*B