PDA

View Full Version : Datenstruktur über Feldgruppe legen / RPG



RKA
28-01-04, 09:28
Hallo,

wer kann mir sagen wie es funktioniert bei RPG eine Datenstruktur über die Feldgruppe zu legen.

Vielen Dank.

Gruss

Robert

Fuerchau
28-01-04, 09:33
RPGIV

E MYTBL 100 1 // Tabelle mit 100 x 1 Zeichen

IMYDS DS
I 1 100 MYTBL
I 1 1 FLD1
I 2 5 FLD2
:

Durch die erneute Definition von MYTBL in der DS erfolgt eine Überlagerung der Felder.

RKA
28-01-04, 09:47
danke

B.Hauser
28-01-04, 12:27
Hallo Fuerchau,

Deine Lösung ist RPGIII oder RPG400 und mit Sicherheit nicht RPGIV.
(E-Bestimmungen gibt es in RPGIV nicht und I-Bestimmungen braucht man nicht mehr!)

In RPGIV geht das etwas eleganter:
Man kann auf andere Felder referenzieren.
Statt Von/Bis-Angaben genügt die Feld-Definition (Länge/Typ/Dezimal-Stellen)
Sind Felder bereits definiert, z.B. in Datei durch F-Bestimmung,
genügt eine Auflistung der Felder.

Wichtig ist nur, dass die Feldgruppe die Datenstruktur überlagert und nicht etwa das 1.Feld.



D DSUmsatz DS
D UmsJan 11P 3
D UmsFeb 11P 3
D UmsMrz 11P 3
D UmsApr 11P 3
D UmsMai 11P 3
D UmsJuni 11P 3
D UmsJuli 11P 3
D UmsAug 11P 3
D UmsSept 11P 3
D UmsOkt 11P 3
D UmsNov 11P 3
D UmsDez 11P 3
D FGUmsatz like(UmsJan) Overlay(DSUmsatz)
D Dim(12)

* Überlagerung von Datei-Feldern
D DSADName DS
D ADNA1
D ADNA2
D ADNA3
D ADNA4
D ADNA5
D FGName like(ADNA1) Dim(5) overlay(ADNAME)

Fuerchau
28-01-04, 13:00
Ja OK, mit den Nummern vertue ich mich immer etwas. Für mich gibts nur die Unterscheidung zwischen RPG und RPGLE.

Ich lass die Nummer demnächst weg;)

Rincewind
25-06-04, 15:22
Hy,

Kann mir jemand sagen ob das auch mit Feldern einer Extern Beschriebenen Datenstruktur geht?


D PARM620 E DS 256 EXTNAME(FIL620ED)

D STDVDS DS
D PFST1V
D PFST2V
D PFST3V
D PFST4V
D STDV LIKE(PFST1V) DIM(4) OVERLAY(STDVDS)


In der Art hab ich das probiert, da sagt er beim wandeln leider dass die Felder schon definiert sind.
Vermutlich gehts ganz leicht und ich hab nur mal wieder das Problem mit dem Baum und dem Wald.

Ansonsten schönes Wochenende

Rince

B.Hauser
25-06-04, 15:41
Hy,

Kann mir jemand sagen ob das auch mit Feldern einer Extern Beschriebenen Datenstruktur geht?


D PARM620 E DS 256 EXTNAME(FIL620ED)

D STDVDS DS
D PFST1V
D PFST2V
D PFST3V
D PFST4V
D STDV LIKE(PFST1V) DIM(4) OVERLAY(STDVDS)

In der Art hab ich das probiert, da sagt er beim wandeln leider dass die Felder schon definiert sind.
Vermutlich gehts ganz leicht und ich hab nur mal wieder das Problem mit dem Baum und dem Wald.

Ansonsten schönes Wochenende

Rince

Hallo Rince,

wie der Compiler sagt, ein Feld darf nur in einer Datenstruktur enthalten sein. Würde es sich um eine Datei, die in den F-Bestimmungen definiert ist, würde es gehen.

Du musst einen kleinen Umweg über einen Pointer machen
Hier ein Beispiel:


D DSADRBP E DS EXTNAME(LLADRBP)

D MyPtr S * Inz(%Addr(ADNA1))
D Name based(MyPtr) like(ADNA1) dim(5)

D Index S 3U 0
/Free
clear DSADRBP;
ADNA1 = 'ABC';
ADNA2 = 'BCD';
ADNA3 = 'EFG';
ADNA4 = 'HIJ';
ADNA5 = 'XYZ';
For Index = 1 to 5;
Dsply Name(Index);
EndFor;
/End-Free


Birgitta

Fuerchau
25-06-04, 15:51
In RPG ist es leider so, dass Felder insgesamt nur 1x definiert werden (Ausnahme ab V5 mit qualified). Die Felder sind also schon in PARM620 definiert.
Du must deine Pseudo-Struktur in PARM620 als Zeichenfeld definieren (leider mit von-bis) und dann den Overlay.

D PARM620 E DS 256 EXTNAME(FIL620ED)
d STDVDS (von) (bis)
D STDV LIKE(PFST1V) DIM(4) OVERLAY(STDVDS)

Wenn die Struktur PARM620 insgesamt nicht gebraucht wird und die Datei ja in den F-Bestimmungen vorkommt sind die Felder bereits definiert (I-Bestimmung) und du läßt PARM620 weg. STDVDS ist dann so korrekt.

Liegen die Felder in der Struktur nicht direkt hintereinander, wirds etwas komplizierter.

Rincewind
28-06-04, 10:49
Hallo ihr beiden,

Vielen Dank für die Hilfe.

Die Lösung mit dem Pointer ist mir noch zu neu, ich arbeite noch nicht sooo viel mit denen, von daher werde ich mich zunächst der "althergebrachten" Lösung widmen. So habe ich es ohnehin schon gemacht, da das Programm mal wieder schnell-schnell fertig werden musste.

Ich werde mir das mal merken um dies in etwas weniger hektischen Zeiten auszuprobieren.

Vielen Dank

Rince