View Full Version : FREE RPG Z-Add / Move
loeweadolf
21-02-04, 22:15
Folgendes Problemchen:
2 Variablen
D FeldA s 5 0 inz(12345)
D FeldB s 3 0 inz(0)
Mit welcher Anweisung in Free RPG bekomme ich den Wert von FeldA (letzten 3 Stellen = 345 ) nach FeldB.
Bei EVAL gibts einen Programm-Abbruch.
Im festen Format könnte man z.B.: verwenden:
z-add FeldA FeldB
oder
move FeldA FeldB
mfg. Ludger :rolleyes:
Hallo Ludger,
das was Du da im fixed Format macht, darf ja eigentlich nicht wahr sein und würde auch in keiner ordentlichen Programmiersprache gehen. Da wird ein numerisches Feld als Alfa angefasst und rein zufällig (in Worten zufällig) landen die 3 letzten Stellen woanders; jede Änderung der Deklaration verändert den Code.
Was willst Du eigentlich wirklich??
Ich vermute mal, Du willst den Rest nach Division durch 1000, das geht dann mit:
FeldB = %rem(FeldA : 1000);
den Ewald kannst Du getrost weglassen, es reicht schon, wenn Du das ebenso unsinnige /free nicht weglassen darfst.
mfg
Dieter Bender
loeweadolf
22-02-04, 09:44
Guten Morgen Dieter,
es ist d o c h wahr, weil die Deklarationen genauestens bekannt sind und die Übertragung der letzten drei Stellen geschieht nicht zufällig, sondern bewußt gewollt.
Der Tipp mit dem Rest nach der Division durch 1000 ist sehr gut. Das kann ich hierfür verwenden.
Die Sache mit "Ewald" ist bekannt.
Es ist doch schön zu sehen, dass auch andere am Karneval am Computer sitzen.
In diesem Sinne: Vielen Dank und Helau
Hallo Ludger,
ich kenne diese Art zu programmieren, aber schlechter Stil ist es dennoch, eine Änderung an einer Stelle (der Deklaration) hat völlig unübersehbare Auswirkungen an anderer Stelle (im Code). Zudem ist es so, dass man den code nicht versteht ohne in der Deklaration nachzusehen. Man macht scheinbar eine Zuweisung, erwartet also, dass in beiden Feldern dasselbe steht und zieht die "Denkste" Karte.
BTW: Karl ist im free ebenso überflüssig wie Ewald.
Alternative zu %rem ist hier Casting mit %char und dann %subst und dann wieder Cast rückwärts mit %int
Dieter Bender
loeweadolf
22-02-04, 13:50
Hallo Dieter,
BTW.
%char %subst %int
BIFs sind in vielen Fällen recht hilfreich. Doch in manchen Fällen fährt man mit der Kuh ums Dorf.
mfg Ludger
Hallo Ludger,
dann macht man sich eine eigene Procedure, die weiss wie man mit einer Kuh um's Dorf fährt, gibt der einen sprechenden Namen und dann wird es in der Anwendung wieder einfach und lesbar.
mfg
Dieter Bender
Nun, eine genauso eindeutige Variante ist die korrekte Definition:
d ds
d Felda 5 0 inz(12345)
d feldb 3 0 overlay(felda:2)
Nun spart man sich den EVAL und kann an der Definition erkennen, was man erreichen will.
Hallo,
@Baldur: Dafür gilt dasselbe, wie für die MOVE, Z-ADD Variante, verdeckte Programmierung => schlechter Stil. Die Sparsamkeit mit EVAL ist auch so 'ne Sache. Man schreibt meist nur einmal und liest mehrfach und beim lesen wird's hier aufwändiger.
mfg
Dieter Bender
PS: einfach nur meine Meinung, mit der ich meist nicht hinter dem Berg halte.