![]() |
Wie kann ich das parsen??
Ich versuche schon seit einiger Zeit etwas zu parsen das verschiedene Schreibweisen haben kann und komme auf keinen gemeinsamen Nenner. Vielleicht könnt ihr mir dabei helfen.
Es geht darum folgende Schreibweisen für eine Formel zu parsen, wobei es aber auch vorkommen kann das teile nicht in die Formel eingesetzt werden müssen. Das es hier letztendlich um Koordinaten geht ist unerheblich! Es zählt nur das die Schreibweise/Form erhalten bleibt Vorgegeben ist: A=4 B=3 C=9 D=1 Nun kann dies auf unterschiedlichste Art und Weise in eine Formel eingesetzt werden: Zitat:
Zitat:
Zitat:
Methode 1 und 3 muss berechnet werden und Methode 2 nicht. Ich nutze den cyMathParser zum berechnen der Formeln. Methode 3 kann ich einfach berechnen ohne etwas zu ändern. Die kann ich also so in den cyMathParser schicken. Mit Methode 2 geht das natürlich nicht, da müssten eigentlich nur die klammern entfernt werden. Und Methode 1 ist eine Mischung aus Methode1 und Methode 2. Ein Teil muss berechnet werden und ein anderer Teil muss nur die Klammer entfernt werden. Wie kann ich die verschiedenen Methoden unterscheiden und darauf reagieren damit das Ergebnis immer stimmt? Hat da jemand eine Idee?? |
AW: Wie kann ich das parsen??
As i wright understand, you should use onp (odwrotna notacja polska)
![]() Robert |
AW: Wie kann ich das parsen??
Hat jemand noch eine andere Idee?
|
AW: Wie kann ich das parsen??
Sieht für mich nach einem Geocache aus, meinst du nicht, dass es schneller wäre, das von Hand zu machen?
Nichtsdestotrotz... auf Basis der von dir gegebenen Beispiele:
Code:
Hab allerdings nicht verstanden wie die "+300" und "+250" beim 3. Beispiel zustande kommen... aber da du meintest, dass du bis zum Zwischenergebnis kommst, wirst du es ja wissen.
// Parsen
1. Gehe zum Anfang des Eingabestrings. 2. Suche nächstes "(" und merke Position. 3. Suche nächstes ")" und merke Position. 4. Kopiere den Inhalt zwischen den Klammern und hänge ihn an ein Array an. 5. Suche nächstes "(" und merke Position. 6. Kopiere den Inhalt zwischen dem vorigen ")" und dem neuen "(" und hänge ihn an das Array an. 7. Wenn nicht am Ende angelangt, gehe zu 3. // Evaluieren 8. Setze "Ergebnis" auf 0 9. Gehe zum Anfang des Arrays. 10. Nimm nächstes Element aus dem Array und evaluiere den Inhalt mittels Matheparser. 11. Nimm nächstes Element aus dem Array. Wenn "+": Addiere Zwischenergebnis zu "Ergebnis" Wenn "-": Subtrahiere Zwischenergebnis von "Ergebnis" Wenn "." oder leerer String: multipliziere "Ergebnis" mit 10 und addiere Zwischenergebnis. 12. Wenn nicht am Ende des Arrays angelangt, gehe zu 10. 13. Am Ende "Ergebnis" in String umwandeln und nach den ersten beiden Ziffern einen "." einfügen. |
AW: Wie kann ich das parsen??
Zitat:
Zitat:
Allerdings frage ich mich wo der Nutzen ist. Es gibt so viele Möglichkeiten. Sollen die alle abgedeckt werden? Lohnt sich das? Und was nützt mir so ein Programm, wenn ich am Ende der Runde im Wald stehe, es sei denn es wird eine Smartphone App. Aber so was habe ich mit Papier (Notizbuch) und Bleistift auch bisher immer noch so in einer angemessenen Zeit hinbekommen und den Bonus gefunden. (Und bei über 1.400 Funden, habe ich das schon mehr als einmal gemacht. ;) ) |
AW: Wie kann ich das parsen??
Zitat:
Zitat:
Dank den Tipps von NamenLozer bin ich etwas weiter gekommen. Ich erstelle nun zuerst mein Zwischenergebnis, dann parse ich ein zweites mal um zu entscheiden was in die Formel kommt und was direkt in das Ergebnis. Dann werden die Formeln errechnet und das Ergebnis generiert. Hört sich soweit einfach an aber ist nicht ganz zu leicht umzusetzen da es doch einige Variationen zu erkennen gilt. |
AW: Wie kann ich das parsen??
Ok, dschast vor fan.
Ich kenne mich damit nicht so aus, aber könnte man hier nicht auch mit regulären Ausdrücken arbeiten, um das zu parsen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 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