AGB  ·  Datenschutz  ·  Impressum  







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

Wie kann ich das parsen??

Ein Thema von BBoy · begonnen am 4. Mai 2013 · letzter Beitrag vom 6. Mai 2013
Antwort Antwort
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Wie kann ich das parsen??

  Alt 4. Mai 2013, 19:13
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??

Geändert von BBoy ( 4. Mai 2013 um 21:34 Uhr)
  Mit Zitat antworten Zitat
ksm

Registriert seit: 4. Mai 2013
Ort: Polen
1 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Wie kann ich das parsen??

  Alt 4. Mai 2013, 22:05
As i wright understand, you should use onp (odwrotna notacja polska) http://de.wikipedia.org/wiki/Umgekeh...ische_Notation

Robert
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: Wie kann ich das parsen??

  Alt 6. Mai 2013, 10:07
Hat jemand noch eine andere Idee?
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Wie kann ich das parsen??

  Alt 6. Mai 2013, 10:48
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Wie kann ich das parsen??

  Alt 6. Mai 2013, 14:52
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. )
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#6

AW: Wie kann ich das parsen??

  Alt 6. Mai 2013, 15:22
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 Ü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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Wie kann ich das parsen??

  Alt 6. Mai 2013, 15:26
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 07:05 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