PDA

View Full Version : warum 0



ILEMax
14-04-08, 10:54
Hi @all
kann mir mal einer erklären warum das 0 und nicht 3 ist ?

D xxx DS
D SUST 1 0 Dim(100)
D IXX 3 0 inz
...
D ATR3 S 1
...
C eval SUST(2)= 8
...
C EVAL IXX = 2
...
C EVAL ATR3 = %EDITC((SUST(IXX)-5):'X')

Ergebmis in ATR3 : 0 statt 3, warum ?

gruß
IleMax

Alexander
14-04-08, 12:20
ATR3 muss mindestens 2A sein.

B.Hauser
14-04-08, 12:37
Hallo,

SUST(IXX)-5 generiert ein 2-stelliges Ergebnis, '03'
Durch den EVAL und den %EditC wird nur die 1.Stelle in das einstellige Text-Feld übertragen. Demzufolge ist das Ergebnis 0

Birgitta

ILEMax
14-04-08, 13:04
Vielen Dank euch beiden für die Info.
wobei
einstelliges Feld minus einstelliges Feld = 2 stelliges Feld aus meiner sicht etwas seltsam ist
naja, RPG halt
Danke
ILEMax

BenderD
14-04-08, 13:23
naja, mit solchen Problemen muss man immer rechnen bei geschachtelten Ausdrücken (und beim rechnen mit Literalen). Die Zuweisung hat immer die niedrigste Priorität und Klammern haben Vorrang. Der Compiler legt sich dann nach irgendwelchen Regelwerken (die man manchmal in der Reference findet, manchmal nicht) Zwischenvariablen an und die für (SUST(...) - 5) ist hier halt zweistellig (nach dem Fressermotto lieber den Magen verrenken als was zu verschenken). Man hat jetzt mehrere Möglichkeiten:
- man lernt die Reference auswendig
- man sagt klar, was man haben will
-- nicht schachteln
-- Zwischenvariablen selber anlegen
-- casten (-> %editc(%dec(sust...): 1 : 0)), oder so ähnlich)

D*B



Vielen Dank euch beiden für die Info.
wobei
einstelliges Feld minus einstelliges Feld = 2 stelliges Feld aus meiner sicht etwas seltsam ist
naja, RPG halt
Danke
ILEMax