![]() |
String mit Bedingung auswerten
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 |
AW: String mit Bedingung auswerten
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe momentan keine Zeit und kann Dir jetzt auch nicht sagen, ob der Parser von damals mit solchen Bedingungen klar kam, allerdings ließe sich das recht leicht implementieren. Eine Demo ist dabei. Schau einfach mal rein.
...:cat:... |
AW: String mit Bedingung auswerten
Hallo,
ich würde die Eingabeparameter erst auf numerisch / nicht numerisch (Dezimalsystem!) prüfen, um dann anschließend auf 2 Arten weiter zu arbeiten. Fall 1: numerisch; hier ist es doch relativ einfach, da die Zeichen (+ - * / < < <>) direkt ausgewertet werden können. Fall 2: nicht numerisch; Rechenoperationen funktionieren nicht und die Vergleichsoperatoren kannst Du wie gewohnt verwenden ->
Delphi-Quellcode:
Vielleicht hilft`s ja schon!
if 'Perter' > 'Zacharias' then
ShowMessage('Peter ist größer Zacharias') else ShowMessage('Peter ist nicht größer Zacharias'); if 'Perter' <= 'Zacharias' then ShowMessage('Peter ist kleiner gleich Zacharias') else ShowMessage('Peter ist nicht kleiner Zacharias'); Gruß Rolf |
AW: String mit Bedingung auswerten
Zum prüfen ob ein String eine Nummer ist benutze ich immer gerne das hier
Delphi-Quellcode:
function IsNumeric(const aString: string; const bAcceptNegativeNumbers: Boolean = True): Boolean;
var bRes: Boolean; begin bRes := StrToInt64Def(aString, 0) = StrToInt64Def(aString, 1); if bRes and (not bAcceptNegativeNumbers) and (StrToInt64(aString) < 0) then bRes := False; Result := bRes; end; IsNumeric('123'); // True IsNumeric('-123'); // True IsNumeric('-123', False); // False IsNumeric('ABC'); // False |
AW: String mit Bedingung auswerten
Liste der Anhänge anzeigen (Anzahl: 2)
Ich habe es geschafft, das Projekt mal fix anzupassen. Unterstützung für >, >=, <, und <= sind jetzt enthalten, siehe Math.Parser.Operators. Weitere kannst Du einfach hinzufügen.
Achtung, da das als Mathe-Berechnung gedacht ist, geben die Vergleiche 1 zurück, wenn diese passen, und 0 zurück, wenn nicht. ...:cat:... |
AW: String mit Bedingung auswerten
Soll das mit Delphi 2007 laufen oder darf es auch etwas neuer sein?
|
AW: String mit Bedingung auswerten
Zitat:
|
AW: String mit Bedingung auswerten
Zitat:
Vorab Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz