Einzelnen Beitrag anzeigen

ioster

Registriert seit: 15. Aug 2008
84 Beiträge
 
Delphi 10.3 Rio
 
#1

String mit Bedingung auswerten

  Alt 16. Jan 2017, 11:02
Hallo,

ich suche nach einer Möglichkeit, eine Zeichenkette mit einer Formel auch als booleschen Ausdruck prüfen zu können. Hintergrund ist die Einschränkung einer Funktion, die nur bei Einhaltung einer Bedingung ausgeführt werden soll. Die Bedingung soll vom Anwender definiert und in einer Datenbank gespeichert werden.

Ich nutze schon einen MathParser, der mir bei der Umrechnung von Formeln hilft, die in ähnlicher Weise in meinen Anwendungen hinterlegt werden können. Dabei ersetze ich immer erst Platzhalter für Feldinhalte und schicke die Zeichenkette durch die mathematische Bearbeitung. Allerdings bekomme ich nur numerische Werte aus der Routine zurückgeliefert und ich möchte auch nicht das Risiko eingehen, die Routine selber um die Umsetzung der booleschen Wertigkeit zu ergänzen. Es sei denn, die Lösung wäre trivial und am Ende der Funktion umzusetzen. Ansonsten tendiere ich zu einer zweiten Funktion.

Allgemein fehlt mir aber der funktionelle Ansatz. Vielleicht stehe ich auch nur auf dem Schlauch und brauche eine kleine Eingebung von außen.

Damit meine Frage etwas leichter verständlich ist, hier ein Beispiel für eine solche Zeichenkette:

"[Bestand] + [Bestellung] - [Auftrag] > 0"

Die Platzhalter für den Lagerbestand, die bestellte und durch Auftrag reservierte Menge wird von mir durch einen Parser mit reellen numerischen Werten gefüllt, so dass es z.B. anschließend so aussieht:

"30 + 50 - 20 > 0"

Mit meinem MathParser komme ich bei einer solchen Konstellation nicht weiter. Der könnte den Wert bei "30 + 50 - 20" korrekt ermitteln, aber mit größer, kleiner, gleich usw. ins Rotieren kommen. Die Funktion darf nicht auf mathematische Ausdrücke reduziert werden. Genauso kann dort auch ein Ausdruck wie "[Name] <> 'MEIER'" als Bedingung definiert sein, der in "'MÜLLER' <> 'MEIER'" aufgedröselt sein könnte.

Wenn jemand eine Idee hat, wie das Problem gelöst werden kann, wäre ich für Infos dankbar. Sollte es irgendwo eine entsprechende Library geben, wäre das besonders hilfreich.

Danke im voraus.

Ingo
  Mit Zitat antworten Zitat