View Full Version : FREE RPG Extender H für aufrunden
loeweadolf
25-02-04, 00:47
Wie kann ich aufrunden im FREE RPG.
Beispiel:
Ergebnis (h) = Zahl1 * Zahl2
Die Umwandlungsliste meldet mir: *RNF7030: Der Name H ist nicht definiert.
Im Internet (RPG-Referenz) konnte ich die Lösung nicht finden.
mfg. Ludger
Klaus Meyer
25-02-04, 08:09
versuche es mal mit
eval(h) Ergebnis = Zahl1 * Zahl2
mfg Klaus
Hallo Ludger,
normealerweise sind EVAL und CALLP in RPG-Free-Format nicht notwendig.
Die einzige Ausnahme ist bei Erweiterungen z.B. (H) oder (E).
Werden Erweiterungen verwendet, darf zwischen dem OpCode und der Erweiterung kein *Blank stehen!
(Im Gegensatz zur klassischen Schreibweise)
Wenn Du auf das EVAL verzichten möchtest, musst Du mit Built-In-Funktionen arbeiten.
z.B. %DecH für Dezimal-Werte, %IntH oder %UnsH für Integer
Das H steht jeweils für kaufmännisch runden.
/Free
Ergebnis = %DecH(Zahl1 * Zahl2: 11: 3);
/End-Free
Birgitta
loeweadolf
25-02-04, 09:28
Hallo Klaus, es hat geklappt, danke..
Ich war mir 100% sicher, diese Variante schon getestet zu haben, anscheinend wohl doch nicht.
Ein anderes Problemchen:
Wie bringe ich in FREE RPG ein Datumsfeld in ein num. Feld mit 6,0 Länge ?
D Datum S d
D DatNeu S 6 0
Datum ist bereits gefüllt (*eur).
Nun möchte ich den Inhalt von Datum nach DatNeu (dmy) überstellen.
mfg- Ludger
loeweadolf
25-02-04, 09:34
Hallo Birgitta, danke für den Hinweis.
Eine Frage zu %decH
Was bedeuten in dem Beispiel die Angaben :11:3 ?
Ist das die Länge des Ergebnisfeldes ? Das kann eigentlich nicht sein, da dieses bereits definiert wurde.
Warum ist in Free Rpg kein CALLP mehr notwendig ?
mfg. Ludger
Hallo Ludger,
1. Umsetzen Datum nach Datum 6,0 im Format DMY:
D DateEur S D DatFmt(*Eur)
D DateNum S 6P 0
/Free
DateNum = %Int(%Char(DateEur: *DMY0));
/End-Free
2. Bei der Built-in-Funktion %DecH können die Länge und die Anzahl der Dezimal-Stellen angegeben werden. (Parameter 2/3)
Dies ist gerade bei komplexen Rechenoperationen sinnvoll, da intern mit Gleit-Komma gerechnet wird.
Die Parameter können als Variable verwendet werden.
Allerdings muss das Format zur Compile-Zeit bekannt sein.
Am besten hinterlegt man eine Konstante:
Länge: Const(%Size(RefFeld))
Anzahl Dezimalstellen: Const(%DecPos(RefFeld)
3. Warum wird CallP im Free-Format nicht mehr benötigt?
Die Frage müsste anders lauten: Warum wurde CallP in der klassischen Schreibweise benötigt?
Aus dem gleichen Grund warum EVAL erfunden wurde:
Damit das Feld OPCODE gefüllt werden kann.
Durch die eindeutige Schreibweise kann der Compiler erkennen, dass es sich um einen Programm/Prozedur-Aufruf handelt.
Birgitta
Hallo nochmal,
@Birgitta zu 3. stimmt nur fast, das mit dem CallP, da gibt es ein paar Probleme, da RPG nach wie vor keine reservierten Wörter hat. Der Compiler kriegt den Husten, wenn man eine procedure wie einen Opcode nennt und reagiert darauf unterschiedlich und kurios.
BTW: als ich das erste Mal auf einer common Veranstaltung nach den zwei überflüssigsten RPG Anweisungen gefragt habe und dann EVAL und CALL benannt habe, habe ich einiges an Murren provoziert.
Was sind die zwei überflüssigsten RPG Anweisungen im Free Format???
/free und /endfree; das sieht man schon daran, dass keine Lochkartenart (Stelle 6) angegeben ist.
mfg
Dieter Bender
loeweadolf
25-02-04, 10:58
Hallo Birgitta, vielen Dank. Ludger
@Dieter
Ohne /free /endfree mag der Compiler aber nicht !
Hallo,
@Baldur: da kann man wieder mal sehen, wie schlampig dieser angeblich Meilenstein des Software Engineering entwickelt ist
Dieter Bender