Anmelden

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 ?

Fuerchau
20-01-14, 11:33
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(....);

Robi
20-01-14, 12:15
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.

Robi
20-01-14, 12:40
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