View Full Version : Rechenformeln aus Tabelle ?
loeweadolf
20-01-14, 10:55
Moin, folgende Problemstellung:
In RPG sollen bestimmte Berechnungen durchgeführt werden, z.B.
((Breite x Länge * 1,1) / (WarBreit + 0,05)) * 2
Es ist ja heute kein Problem mehr, diese in RPG in einer Zeile anzugeben.
Gibt es irgend eine Möglichkeit, diese und andere Formeln in einer Tabelle (Datei) einzugeben und dann im Programm darauf zuzugreifen und auszuführen ?
Indirekt ja:
Du kannst du Formel als dynamischen SQL ausführen:
MyStr = "select Formel from sysibm/sysdummy1"
- Prepare
- declare Cursor für Statement
- Open
- fetch ... into :Myresult
- close
Jetzt musst du dir nur noch überlegen, wie du die Formel mit den Variablen belegst.
Hier bietet sich die SQL-Funktion replace() an.
exec sql set :MyFormel = replace(....);
Wir haben eine Datei in der du sogenannte Rechenregeln erfassen kannst.
Neben der Ziel Einheit (Rollen, Lfm, Kg, Stk...) kannst du komplexe Formeln erfassen
incl. Klammer und Dateivariablen.
"<Feld1>*<Preis>/<divisor> +(100*<feld2> + <Feld3>)..."
Ein Pgm das 'BasisDaten' empfängt, die Formel sucht, ggf andere Dateien liest und zum Schluß die Formel ausrechnet.
Recht komplex, aber, in unserem Fall 'nur' kapp 10 Tage aufwand.
Wenn sich soetwas für dich lohnt ... einfach mal ne PM schreiben
Robi
loeweadolf
20-01-14, 12:26
Wir haben eine Datei in der du sogenannte Rechenregeln erfassen kannst.
Neben der Ziel Einheit (Rollen, Lfm, Kg, Stk...) kannst du komplexe Formeln erfassen
incl. Klammer und Dateivariablen.
"*/ +(100* + )..."
Ein Pgm das 'BasisDaten' empfängt, die Formel sucht, ggf andere Dateien liest und zum Schluß die Formel ausrechnet.
Recht komplex, aber, in unserem Fall 'nur' kapp 10 Tage aufwand.
Wenn sich soetwas für dich lohnt ... einfach mal ne PM schreiben
Robi
Das sieht ja so aus, als ob die Formeln Byte für Byte aufgelöst werden und dadurch
entspr. Rechenbefehle aufgerufen werden. Das scheint mir für meinen Bedarf etwa zu aufwendig. Trotzdem vielen Dank.
</feld3></feld2></divisor></preis></feld1>
loeweadolf
20-01-14, 12:28
Indirekt ja:
Du kannst du Formel als dynamischen SQL ausführen:
MyStr = "select Formel from sysibm/sysdummy1"
- Prepare
- declare Cursor für Statement
- Open
- fetch ... into :Myresult
- close
Jetzt musst du dir nur noch überlegen, wie du die Formel mit den Variablen belegst.
Hier bietet sich die SQL-Funktion replace() an.
exec sql set :MyFormel = replace(....);
Das muss ich mir noch geauer ansehen. Danke für die Antwort.
Ja, sozusagen Byte für Byte. Erst werden die Variablen aufgelöst und in den String eingearbeitet, dann wird die Formel durch einern rekursiven Aufruf Stück um Stück gerechent