Autor Beitrag
daywalker0086
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Fr 25.07.14 13:21 
Hallo Leute,
ich wollte einmal nachfragen wie ihr das machen würdet:
Folgendes:
Ich habe einen Wert, welcher mit einer Formel verändert werden soll:
Zum Beispiel:
ausblenden Delphi-Quelltext
1:
value:= value*1000;					

Soweit kein Problem, jetzt möchte ich aber ds die Fomel nicht direkt einprogrammiert ist, sondern aus einer XML Datei ausgelesen wird und so quasi veränderbar ist.

Also value:= value "Platzhalter";
jetzt stellt sich nur die Frage wie ich sowas abspeichere, ich würde jetzt einen String nehmen und dann quasi den String zerlegen und mich nach mathemtischen Zeichen umschauen, und dann eben mit einer if oder Case Anweisung ala:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if string[i] = '*' then
begin
value:=value*stringrest_nach_math_Zeichen;
end;
if string[i] = '/' then
begin
value:=value/stringrest_nach_math_Zeichen;
end;

aber dann kann ich keine Formeln frei wählen also mit mehreren Formelzeichen ala value:= value*1000/3;
aufbauen oder ich müsste das alles irgendwie berücksichtigen.
Ich will auch keine wilden Formeln da rein bringen aler 2 Rechenzeichen wären schon niocht schlecht.
Wie würdet ihr sowas machen?
Hintergrund ist der: der wert kommt von einem Prüfgerät. Und je nach dem welcher Prüfgegenstand angeschlossen ist muss der Wert noch verrechnet werden damit dann die richtigen Werte erscheinen ( Bsp: Das Gerät misst immer nur eine Spannung, wenn ich jetzt damit aber einen Stromwert messe(shunt) muss ich die Spannung eben noch umrechnen, diese Infos stehen in einer xml Datei)

Grüße Christian
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 25.07.14 13:40 
So einen Parser kann man gut als endlicher Automat umsetzen, je nach Wunsch auch mit Rekursion. Sprich du gehst zeichenweise durch und analysierst dann anhand des aktuellen Zeichens was du machen musst.

Wenn du nach mathematischen Parsern suchst, wirst du aber auch sehr viele fertig finden.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 25.07.14 16:48 
Ganz klar und mit Delphi in letzter Zeit schon mehrfach gemacht: Werf XML über Bord und binde deine Formel als Lua-Sript ein. Der Interpreter dazu ist nur eine dll und fertige Wrapper dafür gibts auch für Delphi.
Dann hast du eine vollständige Programmiersprache, mit der du jegliche Form von Formel dem Nutzer zugänglich machst. Mit vergleichsweise wenig Aufwand.

Sähe dann in etwa so aus:

ausblenden Quelltext
1:
2:
3:
function meineFormel( x )
  return x*x*4
end


Die Formel kannst du dann direkt von Delphi aus mit Hilfe der dll aufrufen/ausführen. Aufrufe sind übrigens auch in umgekehrter Richtung, von Lua zu Delphi, möglich.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 25.07.14 20:33 
Da würde ich dann eher Pascal Script empfehlen, denn das kann man ohne DLL einkompilieren. Wir haben auch an Lua gedacht, es dann aber nach einigen Versuchen und Tests verworfen und sind bei DWScript geblieben. Das ist echt genial.

Für diesen Beitrag haben gedankt: Xion
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 25.07.14 21:08 
Klingt interessant.
Müsste man aber erstmal sehen, ob das unter Delphi 2005 (meine und Threadstarter Version) läuft.
code.google.com/p/dwscript/wiki/FAQ hat folgendes geschrieben:
Delphi 2009 is the current minimum version. Development happens on Delphi XE however, so SVN version may temporarily become incompatible with previous versions.


Der Vorteil von Lua ist allerdings, dass es Haufenweise Informationen dazu im Netz gibt, auch da es etwa gerne in der Spieleindustrie verwendet wird.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 25.07.14 21:15 
Es gibt ja auch andere Pascal Script Projekte, so wie dieses:
www.remobjects.com/ps.aspx
Da Inno Setup das auch nutzt, muss es auch mit alten Versionen gehen.