Autor Beitrag
Peter Bär
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17
Erhaltene Danke: 1



BeitragVerfasst: Mi 15.06.11 16:17 
Hallo

Ich habe ein Problem mit der Umwandlung eines Strings in eine mathematische Formel.

Ausgangslage:
Eine Textbox, die der User beliebig mit einer mathematischen Formel beschreiben kann (z.B. (6 + 4 + 2) * 3)

Problem:
Den Textboxinhalt in eine mathematische Formel umwandeln, berechnen und das Resultat weiterverarbeiten

Ich habe bereits versucht, den Stringwert zu splitten und die Einzelteile zu verarbeiten. Dies scheint mir aber eine sehr aufwendige Art an das Resultat zu gelangen.

Kennt jemand eine Möglichkeit den Text zu verarbeiten?
Bin für jeden Tip dankbar.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 15.06.11 16:41 
Das nennt sich Parser, mit dem Stichwort solltest du schon weiterkommen. ;-)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 15.06.11 16:53 
Hallo Peter,

da empfehle ich doch einfach mal meinen eigenen Parser für mathematische Formeln ;-)

Für diesen Beitrag haben gedankt: Böseskeksi, Peter Bär
Peter Bär Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17
Erhaltene Danke: 1



BeitragVerfasst: Mi 15.06.11 17:18 
Hallo Th69

Gratuliere zu Deinem Code.
Das ist wirklich eine super Sache.

Ich werde mich mal mit Deinem Code auseinandersetzen und für mich eine mögliche Lösung entwickeln.
Mal sehen, ob ich es hinkriege.
Werde mein Lösungsansatz dann (hoffentlich erfolgreich :roll: ) posten.

Danke Dir
Peter Bär Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17
Erhaltene Danke: 1



BeitragVerfasst: Do 16.06.11 13:51 
Hallo Th69

Ich habe mich mit Deinem Beispielcode intensiv auseinandergesetzt und bin nun in der Lage mein Problem anhand Deiner Vorlage zu lösen.
Ich finde Deine Vorlage als Grundlage wirklich genial.
Man kann daraus wirklich sehr viele verschiedene Anwendungsmöglichkeiten erstellen und ausbauen.

Also von meiner Seite ein dickes Dankeschön für Deinen Aufwand.
Ohne Deinen Beispielcode wäre ich wahrscheinlich nicht weiter gekommen.

Best Regards
Peter

Für diesen Beitrag haben gedankt: Böseskeksi
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 16.06.11 14:42 
Hallo Peter,

es freut mich, daß dir mein Parser gefällt und du dich so schnell damit zurechtgefunden hast.
Gerade die Flexibilität war für mich einer der Hauptgründe für die Erstellung (gegenüber anderen recht strikten, hardcodierten Parsern).

Wenn du sinnvolle (allgemeine) Erweiterungen daran vornimmst (oder aber Wünsche hast), dann kannst du diese gerne mir als PM schicken.
Peter Bär Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17
Erhaltene Danke: 1



BeitragVerfasst: Do 16.06.11 15:15 
Hallo Th69

So schnell bin ich auch nicht zurechtgekommen.
Ich bin immer noch am Verstehen und Begreifen Deiner doch recht komplexen Ausführungen :( .

Wenn ich Änderungen oder Erweiterungen vornehme (oder vornehmen kann), dann lasse ich es dich sicher wissen.
Mein Resultat wird sicherlich nicht so ausführlich sein wie Deines.
Vielleicht habe ich nach dem Verarbeiten noch eine gute Idee für eine sinnvolle Erweiterung oder Verbesserung, die ich Dir dann schicken kann.
Ich gebe mein Bestes :wink: .
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 16.06.11 16:02 
Hallo Peter,

für den Anfang kannst du ja ersteinmal die 'FormulaParser'-Klasse benutzen (wie in dem Beispiel im Artikel).
Und wenn du dann noch spezielle Anforderungen hast, so kannst du ja diese Klasse abändern (z.B. um weitere Funktionen oder Operatoren erweitern).

P.S: Da ich u.a. Compilerbau studiert habe, ist mein Artikel vllt. etwas zu theoretisch (und für einen Anfänger sicherlich nicht so einfach zu verstehen).
Um jedoch die Klassen im Detail zu verstehen, habe ich den Artikel so ausführlich wie möglich geschrieben.
Peter Bär Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17
Erhaltene Danke: 1



BeitragVerfasst: Do 16.06.11 16:36 
Hallo Th69

Vielen Dank für Deinen Hinweis.
Ich habe die FormulaParser-Klasse als erstes bereits im Einsatz und funktioniert alles tip top.

Die mathematischen Grundregeln für die '()'-Verarbeitung sind auch schon gelöst.
Da ich nicht sehr hochstehende Berechnungen ausführen muss, sind eigentlich schon alle notwendigen Funktionen vorhanden.

Ich werde den Code noch verständlicher darstellen, mit Text versehen und für meine Anwendung auf ein Minimum reduzieren.
Das Resultat kann ich Dir dann pM senden.