Geschrieben von: Christian Koller
Kategorie: ASP Tricks
This printed page brought to you by AlphaSierraPapa
Vielleicht ist Ihnen das Problem bekannt: Sie wollen eine Berechnung in einer ASP Seite durchführen, aber die mathematische Formel für diese Operation steht nicht von vorne herein fest. Wie kann man diese Problemstellung lösen, ohne einen Mathematikparser zu kaufen (von selbst schreiben möchte ich erst gar nicht reden)?
Möglicherweise haben Sie die Formel aus der Datenbank oder von einer Benutzereingabe in einer Variablen gespeichert. Doch wie bringen Sie VBScript dazu, daß es die Formel als Rechenanweisung akzeptiert und durchführt?
Betrachten wir ein einfaches Beispiel, um den Sachverhalt "live" nachzuvollziehen: Sie wollen ein Benutzerformular auf Basis ASP erstellen, in das man einen mathematischen Ausdruck (und nicht nur einen Wert) für X eingeben kann.
Vielleicht wollen Sie weiters, daß man für Y einen mathematischen Ausdruck eingeben kann, der sogar X als Variable beinhaltet. Die ASP Seite soll dann in der Lage sein, beide Ausdrücke (für X und Y) zu errechnen und auszugeben.
Wenn Sie nun meinen, Sie müssten einen Parser schreiben, der die Ausdrücke auswertet und die zugehörigen mathematischen Operationen durchführt, so werden Sie angenehm überrascht sein, daß VBscript mit der Execute Funktion das Ausführen eines beliebigen Ausdrucks, und damit auch das Berechnen eines mathematischen Ausdrucks erlaubt, solange der Ausdruck der VBScript Berechnungssyntax folgt.
Die Execute Funktion habe ich schon kurz im Artikel Dynamische Includes in ASP vorgestellt. Die einzige Voraussetzung, die ein Windows NT/2000 Webserver erfüllen muß, um die VBScript Funktion Execute benutzen zu können ist, daß mindestens VBScript Version 5.0 auf dem Server installiert ist.
Das nun nachfolgende Beispiel erlaubt es dem Benutzer einen beliebigen (der VBScript Syntax) entsprechenden mathematischen Ausdruck für X und Y einzugeben, und diese in der ASP-Seite berechnen zu lassen.
Gültige mathematische Ausdrücke in VBScript sind zum Beispiel:
Ausdruck | Ergebnis |
---|---|
2000 + 1 | 2001 |
17 / 4 + (25 * 3) | 79.25 |
sqr(2) | 1.4142135623731 |
sin(90 / 360 * 3.1415926) | 0.707106771713121 |
2 ^ 8 | 256 |
abs(-36) | 36 |
Um einen mathemathischen Ausdruck zu berechnen, gibt der Benutzer den Ausdruck in ein HTML Formular ein, und schickt dieses zum Server. Am Server, genauer in der ASP-Seite, wird der Ausdruck aus der Request.Form (oder Request.QueryString) Collection gelesen und in der Variablen AusdruckX gespeichert.
Danach wird dieser Ausdruck berechnet und der Variablen X zugewiesen. Dies geschieht mit Hilfe der VBScript Funktion Execute wie folgt:
Execute("X = " & AusdruckX)
Wenn also die Variable AusdruckX den Ausdruck "(25 / 5) + 1" enthält, so wird nach dem Aufruf von Execute("X = " & AusdruckX) die Variable X den Wert 6 enthalten.
Der Vollständigkeit halber habe ich noch die Lösung zu unserem Anfangsproblem ausprogrammiert, wo der Benutzer beliebige Ausdrücke für X und Y eingeben können soll. Sie finden dieses Beispiel im Download zu diesem Artikel.
Geben Sie im downloadbaren Beispiel einmal die folgenden Ausdrücke ein:
X = 17 + 4 Y = X / 3
und Sie erhalten als Ergebnis
X = 21 Y = 7
Natürlich habe ich in das Script einige Sicherheitsmaßnahmen eingebaut, sodaß der Benutzer nicht einen (gültigen) VBScript Ausdruck eingibt, der zum Beispiel das FileSystemObject Objekt benutzt um Dateien auf dem Webserver zu löschen oder den Sourcecode von ASP Seiten (eventuell inklusive Paßwörtern) auszugeben. Sie halten mit diesem Beispiel also einen voll "on the fly" einsetzbaren Taschenrechner mit VBScript Funktionalität.
Mit VBScript 5.0 (oder höher) ist es keine Hexerei mehr, wenn man beliebige mathematische Ausdrücke berechnen will - oder andere Funktionen dynamisch ausführen möchte (siehe Verwandte Artikel).
Dies ist natürlich nur ein mögliches Einsatzgebiet der Execute Funktion. Experimentieren Sie ruhig ein wenig, aber bedenken Sie, daß in der Execute Funktion auch Ausdrücke ausgeführt werden können, die Dateien auf dem Server löschen, oder Datenbankinformationen zugänglich machen können!
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000727.zip
Dynamische Includes in ASP
http:/www.aspheute.com/artikel/20000706.htm
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.