View Full Version : Wie erhalte ich Subfelder einer qualifizierten externen Datenstruktur in RPGLE?
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?
Am besten mit der BuiltIn-Funktion %subst:
%subst(feld: pos:len) = "neuer wert";
Varxyz = %subst(feld: pos:len);
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
Vielen Dank für die prompte Beantwortung.
Grüße
coolie
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
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 !