PDA

View Full Version : Gepackte Felder in RPG II (RPG36)



Seiten : [1] 2

TSchuler
23-09-16, 13:19
Hallo zusammen,

ich muss eine Anpassung in einem RPG II Programm durchführen und brauche dazu ein gepacktes Feld. Das Feld soll gepackt 6,0 definiert sein.

Mit
C Z-ADD*ZEROS FELD 60
bin ich schon hereingefallen. Ich dachte, das Feld wird wie im RPG III als gepacktes Feld definiert. Aber der Compiler macht daraus ein gezontes Feld.

Ich habe es auch schon über eine DS versucht, aber das haut irgendwie auch nicht hin. Vielleicht mache ich hier ja aber etwas falsch.
I DS
I P 1 40FELD

Weiß jemand, ob man in RPG II ein Feld explizit als gepackt definieren kann (und wenn ja, wie)?

Danke und Grüße
Thomas

Paul_Hofmann
23-09-16, 13:58
Die Datentypen P (gepackt), S (gezont) und B (binär) werden im Free Format durch die Schlüsselworte PACKED, ZONED und BINDEC ersetzt.

Im Free-Format entspricht PACKED(11, 2) der Fix-Format-Definition 11P 2.
Wird ein Feld im Free-Format mit ZONED(7) angegeben, so entspricht dies im Fix-Format der Definition 7S 0.

Hoffe das hilft

Paul Hofmann

camouflage
23-09-16, 14:08
Feld 6.0 gepackt = Feld gezont 11.0
Ich hoffe, ich hab die Frage so verstanden. Alles andere macht keinen Sinn.

Anmerkung: Felddefinitionen nur für I/O packen. Für interne Felder ist das Format egal.

TSchuler
23-09-16, 14:29
Hallo Paul,

danke für Deine Antwort, aber mit Free-Format kann ich unter RPG II (RPG36) leider nichts anfangen.
Für mein Problem sollte ich wissen, wie ich ein Feld unter RPG II explizit als gepackt definieren kann.

Gruß
Thomas

mmaschke
23-09-16, 14:33
In den Rechnenbestimmungen wird das Feld ganz normal mit 6,0 Stellen definiert.

In den Ausgabebestimmungen wird dann in der Stelle 44 ein P angegeben und das Feld wird gepackt gefüllt.

O FELD 4P

In den Eingabebestimmungen sieht es dann so aus:

I P 1 40FELD


Manfred Maschke

TSchuler
23-09-16, 14:35
Feld 6.0 gepackt = Feld gezont 11.0
Ich hoffe, ich hab die Frage so verstanden. Alles andere macht keinen Sinn.

Anmerkung: Felddefinitionen nur für I/O packen. Für interne Felder ist das Format egal.

Nicht ganz.
Ich weiß, wie man in RPG III bzw. RPG IV (ILE) ein gepacktes Feld definiert. Aber unter RPG II (RPG36) funktioniert das irgendwie nicht.

Das Feld benötige ich als Parameter an ein CL-Programm, das will die Daten gepackt haben.

Pikachu
23-09-16, 14:40
Vielleicht liegt's daran:

AS/400 Performance Management Version 3 Release 1 (April 1995) (http://www.astradyne.net/manuals/ir007310.pdf)


... Other systems may process other numeric field types more efficiently. For example, System/36 uses zoned decimal arithmetic. Since the System/36 RPG compiler on the AS/400 (CRTS36RPG) does not generate packed decimal fields, you must use the CRTRPGPGM to get packed decimal field code generated for running on an AS/400.

Fuerchau
23-09-16, 14:54
Ggf. kann man sich dann mit einem Trick behelfen, in dem man eine externe DS (soweit das da schon geht) erstellt, die das Feld als gepackt definiert.
Vielleicht übernimmt der Compiler das dann auch als gepackt.

Pikachu
23-09-16, 15:49
Oder den Wert als Zeichenkette übergeben und im CL empfangen und in ein numerisches Feld übertragen. Vorsicht bei negativen Werten!

Fuerchau
23-09-16, 17:21
Und dann gibts ja immer noch die "Wrapper"-Option:
RPG mit Zoned-Parameter, übertragen in Packed und Aufruf des Originals.
Ggf. Rückübertragen des Wertes wenn es eine Returnwert sein soll.