PDA

View Full Version : Datenstruktur negative Werte



FNeurieser
25-02-13, 11:52
Hallo allerseits,

ich hätte da wieder einmal eine Frage an euch. In einem Programm verwende ich 2 Datenstrukturen die ident aufgebaut sind



*
D S0S# DS
D S0Sum# 60S 0
D S0OBMG 10S 2 Overlay(S0Sum#:1)
D S0BSAK 10S 2 Overlay(S0Sum#:*Next)
D S0RVMG 10S 2 Overlay(S0Sum#:*Next)
D S0DISPO 10S 2 Overlay(S0Sum#:*Next)
D S0SAPGLMG 10S 2 Overlay(S0Sum#:*Next)
D S0LAGER 10S 2 Overlay(S0Sum#:*Next)

D F0S# DS
D F0Sum# 60S 0
D F0OBMG 10S 2 Overlay(F0Sum#:1)
D F0BSAK 10S 2 Overlay(F0Sum#:*Next)
D F0RVMG 10S 2 Overlay(F0Sum#:*Next)
D F0DISPO 10S 2 Overlay(F0Sum#:*Next)
D F0SAPGLMG 10S 2 Overlay(F0Sum#:*Next)
D F0LAGER 10S 2 Overlay(F0Sum#:*Next)


In der Datenstruktur S0S# sind die Werte wie folgt befüllt:

S0OBMG = 0
S0BSAK = -4536
S0RVMG = 0
S0DISPO = -4536
S0SAPGLMG = 0
S0LAGER = -4536

verwende ich jetzt das Statement


C Add S0Sum# F0Sum#


so steht in der Datenstruktur F0S# in den korrespondierenden Feldern

F0BSAK = 4536
F0DISPO = 4536
F0LAGER = -4536

Warum steht in den Feldern nicht der richtige Wert? Kann in einer DS das Minuskennzeichen nicht richtig interpretiert werden?

Danke schon mal für etwaiige Infos.

Fuerchau
25-02-13, 11:57
Ich wundere mich da eher, dass du nicht auf einen MCH-Fehler läufst.

Du arbeitest mit einem 60-Stelligen numerischen Feld, dass nur ganz rechts ein Vorzeichen hat.
Vorzeichen zwischendrin werden wohl eher ignoriert anstatt einen Dezimalfehler wegen ungültiger Daten auszulösen.

Wenn du die einzelnen Felder addieren willst, so musst du schon für jedes Feld einzeln einen Add codieren.
Einen Gruppen-ADD (bei qualified DS gibts ja noch den eval-corr) gibt es in RPG nicht.

PS:
Einen Tabellen-Add gibt es allerdings:

d s0Sum 10S 2 dim(6) overlay(s0sum#)

d f0Sum 10S 2 dim(6) overlay(f0sum#)

f0sum += s0sum; // wird vom Compiler in eine Schleife aufgelöst
oder
add s0sum f0sum


PPS:
Was den Dezimalfehler angeht, so erfolgt bei Zoned-Feldern ja lediglich eine Prüfung, ob in der rechten Tedrade ein Wert 0-9 steht. Die linke Terade wird lediglich im letzten Byte bzgl. des Vorzeichens ausgewertet.
Daher ist das Rechnen mit Buchstaben durchaus möglich :).