PDA

View Full Version : Wie erhalte ich Subfelder einer qualifizierten externen Datenstruktur in RPGLE?



coolie
04-05-04, 12:55
Hallo Forum!

Ich nutze die Möglichkeiten des Datei-Prefixings zusammen mit den Möglichkeiten der Qualifizierung einer (externen) Datenstruktur, um die Felder im RPG-Programm wie folgt ansprechen zu können:


F Datei if e disk prefix('AB.')
D AB e ds extname(Datei) qualified

AB.Datum = 1234567

Welche D-Anweisung ermöglicht es mir, auf die Stellen 2-7 des Feldes Datum (7,0 num.) zugreifen zu können?

Fuerchau
04-05-04, 13:45
Am besten mit der BuiltIn-Funktion %subst:

%subst(feld: pos:len) = "neuer wert";
Varxyz = %subst(feld: pos:len);

B.Hauser
04-05-04, 13:50
Hallo Collie,

externe Datenstrukturen können wie alle anderen Datenstruktruen überlagert werden.
Wichtig ist nur, dass das zu überlagernde Feld mit dem Original-Namen angegeben wird.
Ich persönlich würde jedoch lieber mit Substring arbeiten.

Beispiel:
FldAlpha ist 15A auf Position 486 des Datensatzes
FldNum ist 7P 0 auf Position 375 des Datensatzes.


D MainDSIn E DS EXTNAME(LLDSIN) qualified
D NewFld1 4 overlay(FldAlpha: 3)
D NewFld2 5P 0 overlay(FldNum: 2)
/Free
MainDSIn.FldAlpha = 'ABCDEFGHIJ';
dsply MainDSIn.NewFld1;

MainDSIn.FldNum = 1234567;
dsply MainDSIn.NewFld2;

*InLR = *On;
/End-Free


Birgitta

coolie
04-05-04, 14:53
Vielen Dank für die prompte Beantwortung.

Grüße
coolie

coolie
06-05-04, 15:29
Hallo Birgitta,

zuerst mal ein dickes "Danke schön" für die letzten Hilfen.

Der Hinweis mit dem overlay wäre mir ja die liebste Lösung, aber funktioniert leider nicht so wie's sollte.

Nochmals in Kürze:

Datei BUCHUNGEN enthält ein Feld FLDNUM in Länge 7P 0, welches ein Datum im Format CYYMMDD enthält.

Für diese Datei existiert im Programm eine qualifizierte externe Datenstruktur.

Ich möchte vom Feld FLDNUM die rechten 6 Stellen erhalten, also YYMMDD.

Die vorgeschlagene Overlay-Definition (NEWFLD2 5P 0 overlay(FLDNUM: 2) wird zwar vom Compiler umgewandelt, ergibt aber als Ergebnis den falschen Feldinhalt "YMMDD".

Definiere ich aber

d BU e ds extname(Buchungen) qualified
d NewFld2 6p 0 overlay(FldNum : 2)

so erhalte ich die Fehlermeldung:

*RNF7303 Mit dem Schlüsselwort OVERLAY definiertes Unterfeld NEWFLD2 ist zu groß; die Bestimmung wird ignoriert.

Was mache ich denn da falsch??

Grüße
coolie

Fuerchau
06-05-04, 15:51
Einfach rechnen !
6p 0 beginnt an der Stelle 1, nur die linke Tetrade wird ignoriert. Ob zur Laufzeit aber das richtige Ergebnis kommt, kann ich nicht sagen.
Vorsichtig dann bei Zuweisungen. Die linke Tetrade wird dann immer auf 0 gesetzt !