Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Wie kann ich das parsen?? (https://www.delphipraxis.net/174672-wie-kann-ich-das-parsen.html)

BBoy 4. Mai 2013 18:13

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:

Methode1:
Original:
N 48° 52.(A)(A-1)(A+1)
E 008° 21.(A)(A+5)(A-4)
Zwischenergebnis :
N 48° 52.(4)(4-1)(4+1)
E 008° 21.(4)(4+5)(4-4)
Am Ende soll es so aussehen:
N 48° 52.435
E 008° 21.490
Zitat:

Methode2:
Original:
N 49 (A)(B)(C)(D)(A)
E 008 (B)(A).(D)(D)(C)
Zwischenergebnis :
N 49 (4)(3)(9)(1)(4)
E 008 (3)(4).(1)(1)(9)
Am Ende soll es so aussehen:
N 49 43.914
E 008 34.119
Zitat:

Methode3:
Original:
N 49° 29.(2*A)+(B+C)+13
E 08° 16.(2*A)+(2*B)+(2*C)-10
Zwischenergebnis :
N 49° 29.(2*4)+(3+9)+13+300
E 08° 16.(2*4)+(2*3)+(2*9)-10+250
Am Ende soll es so aussehen:
N 49° 29.333 = Formel wurde berechnet 8+12+13+300
E 08° 16.272
Wie ich aus dem Original das Zwischenergebnis bekomme weiß ich. Das funktioniert. Aber wie ich mit den verschiedenen Formen des Zwischenergebnisses umgehen soll weiß ich nicht.

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??

ksm 4. Mai 2013 21:05

AW: Wie kann ich das parsen??
 
As i wright understand, you should use onp (odwrotna notacja polska) http://de.wikipedia.org/wiki/Umgekeh...ische_Notation

Robert

BBoy 6. Mai 2013 09:07

AW: Wie kann ich das parsen??
 
Hat jemand noch eine andere Idee?

Namenloser 6. Mai 2013 09:48

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:
// 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.
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.

Luckie 6. Mai 2013 13:52

AW: Wie kann ich das parsen??
 
Zitat:

Zitat von NamenLozer (Beitrag 1214290)
Sieht für mich nach einem Geocache aus, meinst du nicht, dass es schneller wäre, das von Hand zu machen?

Exakt.

Zitat:

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.
Wahrscheinlich im Listing des Caches so vorgegeben.

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. ;) )

BBoy 6. Mai 2013 14:22

AW: Wie kann ich das parsen??
 
Zitat:

Zitat von NamenLozer (Beitrag 1214290)
Sieht für mich nach einem Geocache aus, meinst du nicht, dass es schneller wäre, das von Hand zu machen?
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.

Hatte nur vergessen +300 und +250 im Original einzufügen.

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 hin bekommen und den Bonus gefunden. (Und bei über 1.400 Funden, habe ich das schon mehr als einmal gemacht. )
und ich mit meinen über 1600 Funden habe das auch schon oft genug gemacht :-D Über nutzen oder nicht, entscheide ich.... und ich möchte das parsen, es ist eine Herausforderung.
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.

Luckie 6. Mai 2013 14:26

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 00:33 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