AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String mit Bedingung auswerten

Offene Frage von "ioster"
Ein Thema von ioster · begonnen am 16. Jan 2017 · letzter Beitrag vom 16. Jan 2017
Antwort Antwort
ioster

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

String mit Bedingung auswerten

  Alt 16. Jan 2017, 12: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
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

AW: String mit Bedingung auswerten

  Alt 16. Jan 2017, 12:08
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.

......
Angehängte Dateien
Dateityp: zip Live Coding, Math Parser, Full mit Graph.zip (386,2 KB, 4x aufgerufen)
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: String mit Bedingung auswerten

  Alt 16. Jan 2017, 13:07
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:
   if 'Perter' > 'Zachariasthen
      ShowMessage('Peter ist größer Zacharias')
   else
      ShowMessage('Peter ist nicht größer Zacharias');

   if 'Perter' <= 'Zachariasthen
      ShowMessage('Peter ist kleiner gleich Zacharias')
   else
      ShowMessage('Peter ist nicht kleiner Zacharias');
Vielleicht hilft`s ja schon!

Gruß
Rolf
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#4

AW: String mit Bedingung auswerten

  Alt 16. Jan 2017, 13:34
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#5

AW: String mit Bedingung auswerten

  Alt 16. Jan 2017, 13:52
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.

......
Miniaturansicht angehängter Grafiken
addedcomparesupport.png  
Angehängte Dateien
Dateityp: 7z Live Coding, Math Parser, Full mit Graph.7z (44,9 KB, 6x aufgerufen)
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#6

AW: String mit Bedingung auswerten

  Alt 16. Jan 2017, 13:53
Soll das mit Delphi 2007 laufen oder darf es auch etwas neuer sein?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
ioster

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

AW: String mit Bedingung auswerten

  Alt 16. Jan 2017, 16:51
Soll das mit Delphi 2007 laufen oder darf es auch etwas neuer sein?
Ich bin leider bei dem Projekt an Delphi 2007 gebunden.
  Mit Zitat antworten Zitat
ioster

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

AW: String mit Bedingung auswerten

  Alt 16. Jan 2017, 16:55
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.

......
0 und 1 als Rückgabewert ist nicht weiter schlimm, weil in der Regel eine Formel oder eine Bedingung übergeben würde. Ich muss mir das Projekt nachher oder morgen anschauen, ob es in meine Umgebung passt.

Vorab Danke!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz