Anweisungen
Den FPScript-Code Ihrer Formel strukturieren Sie in Form von einer oder mehreren Anweisungen. Sie schreiben jede Anweisung normalerweise in eine eigene Zeile. Sie können jedoch auch mehrere Anweisungen in die gleiche Zeile schreiben. Diese müssen Sie dann mit einem Semikolon ';' trennen. Auch das Splitten einer Anweisung in mehrere Zeilen ist möglich. Für Zeilen, die mit ihren Folgezeilen zusammengefasst werden sollen, müssen Sie als letztes Zeichen einen Backslash '\' oder ein Unterstreichungszeichen '_' eingeben.
Zuweisung
Durch eine Zuweisung können Sie einer Variablen einen anderen Inhalt zuweisen. In einer Variablen, die z. B. eine Datenreihe enthält, können Sie mit der indizierten Zuweisung gezielt einzelne Werte oder Ausschnitte überschreiben. Mit der Set-Anweisung oder dem As Object-Schlüsselwort können Sie einer Variablen eine Objektreferenz zuweisen. Anschließend können Sie diese Variable dann verwenden, um auf Eigenschaften des referenzierten Objektes zuzugreifen.
Treffen von Entscheidungen mit If...Then...Else
Die If...Then...Else-Anweisung wird verwendet, um zu überprüfen, ob eine Bedingung den Wert TRUE oder FALSE hat, um abhängig davon eine oder mehrere Anweisungen auszuführen. Normalerweise ist die Bedingung ein Ausdruck mit einem Vergleichsoperator zum Vergleich von zwei Variablen oder Werten. Informationen über Vergleichsoperatoren finden Sie unter Vergleichsoperatoren. If...Then...Else-Anweisungen können in beliebiger Tiefe verschachtelt werden.
Ausführung eines Blockes, wenn eine Bedingung TRUE ergibt
In diesem Fall entfällt das Schlüsselwort Else:
If Wert > 2 Then
Wert = 5
End
Ausführung eines Blockes, wenn eine Bedingung TRUE ergibt und eines anderen, wenn die Bedingung FALSE ergibt
Die Anweisungen, die auszuführen sind, wenn die Bedingung FALSE ergibt, werden zwischen die Schlüsselworte Else und End eingefügt.
If Wert > 2 Then
Wert = 5
Else
Wert = 0
End
Verwenden von Schleifen zum Wiederholen von Code
FPScript bietet Ihnen eine Vielzahl von Operationen zum Suchen von Ereignissen und zum Verarbeiten von Datensätzen als Ganzes. In seltenen Fällen werden Sie jedoch Schleifen benötigen, um z. B. über die Werte einer Datenreihe zu laufen. Bei einer Schleife definieren Sie in der Regel eine Schleifenvariable, die die Wiederholungen aufzählt. Diese Variable können Sie dann z. B. in einer Indexoperation verwenden, um auf den entsprechenden Wert eines Datensatzes zuzugreifen:
// Variable deklarieren
Dim Ergebnis
// Zu verrechnende Datenreihe kopieren
Ergebnis = Datenreihe
// Über alle Werte der Datenreihe laufen
For Each Row i In Datenreihe Do
// Werte die kleiner als Null sind im Ergebnis auf null setzen
If Datenreihe < 0 Then
Ergebnis = 0
End
End
Return Ergebnis // die Ergebnis-Datenreihe übergeben
Obiges Beispiel verwendet eine Schleife um negative Werte in einer Datenreihe aufzusuchen und auf den Wert Null zu setzen. Alle Anweisungen, die zwischen Do und End stehen werden mehrfach ausgeführt wobei die Variable i von 0 bis zur Werteanzahl von Datenreihe minus 1 zählt. Das Beispiel zeigt auch eine bedingte Anweisung. Die Anweisung Ergebnis = 0. wird nur ausgeführt, wenn der i-te Wert in Datenreihe kleiner als Null ist. Sie können am Beispiel auch sehen, wie FPScript-Programme durch Einrückungen lesbarer gestaltet werden können. Alle Anweisungen innerhalb der Schleife wurden um eine Tabulator-Position eingerückt. Das Gleiche gilt für die bedingte Anweisung.
Hinweis Sie sollten Schleifen nur in den Fällen verwenden, in denen keine passende Funktion existiert und das Problem auch nicht als arithmetischer Ausdruck beschrieben werden kann. Die eingebauten Funktionen von FlexPro sind um ein Vielfaches schneller als die Schleifen, die Sie mit FPScript programmieren. Obiges Beispiel kann z. B. wie folgt umgeschrieben werden:
Dim Ergebnis, Idx // Variable deklarieren
Ergebnis = Datenreihe // Zu verrechnende Datenreihe kopieren
// Positionen aller Werte < 0 ermitteln
Idx = ValuesAboveLevel(Datenreihe, 0, EVENT_INDEX + EVENT_COMPLEMENT)
// Werte an diesen Positionen im Ergebnis auf null setzen
Ergebnis[Idx] = 0
Return Ergebnis // die Ergebnis-Datenreihe übergeben
Sie können eine Schleife mit der Break-Anweisung vorzeitig abbrechen:
Dim Ergebnis = 0
For Each Value v In Datenreihe Do
If v == ? Then
Break
End
Ergebnis = Ergebnis + v
End
Return Ergebnis
FPScript stellt Ihnen die folgenden Schleifen zur Verfügung:
While...End: Führt eine Schleife aus, solange eine Bedingung den Wert TRUE ergibt.
Do...While: Führt eine Schleife aus, bis eine Bedingung den Wert FALSE ergibt.
For...End: Verwendet einen Zähler, um die Anweisungen so oft zu wiederholen, wie durch den Zähler angegeben.
For Each Value...End: Traversiert alle Werte eines Datensatzes. Es wird kein Zähler verwendet.
For Each Element...End: Verwendet einen Zähler, um alle Elemente einer Liste abzuzählen.
For Each Row...End: Verwendet einen Zähler, um alle Zeilen einer Datenreihe oder einer Datenmatrix abzuzählen.
For Each Column...End: Verwendet einen Zähler, um alle Spalten einer Datenmatrix abzuzählen.
Wiederholen von Anweisungen, solange eine Bedingung den Wert TRUE hat
Die While...End-Schleife testet zuerst die Bedingung und führt die Anweisungen dann aus, solange die Bedingung TRUE ergibt. Folgendes Beispiel sucht die Position in Datensatz, ab dem der erste positive Wert auftritt.
i = 0
While Datensatz < 0 Do
i = i + 1
End
Wiederholen von Anweisungen, bis eine Bedingung den Wert FALSE hat
Die Do...While-Schleife führt die Anweisung zunächst ein erstes Mal aus, und testet dann die Bedingung. Folgendes Beispiel berechnet solange Zufallszahlen, bis eine Zahl größer oder gleich Null erzeugt wurde.
Dim Z
Do
Z = Noise(0)
While Z < 0
Verwenden von "For...End"
Mit For...End-Anweisungen können Sie einen Block von Anweisungen so oft wie angegeben wiederholen. Verwenden Sie für Schleifen eine Zählervariable, deren Wert bei jedem Schleifendurchlauf erhöht wird.
Dim a = "" # 3
For i = 0 To 2 Do
a = TextInput("Geben Sie einen Text ein")
End
Verwenden von "For Each Row...End"
Wenn, wie in obigem Beispiel, über alle Elemente eines Datensatzes iteriert werden soll, kann dies mit der For Each Row...End-Schleife eleganter implementiert werden:
Dim a = "" # Input("Anzahl")
For Each Row i In a Do
a = TextInput("Geben Sie einen Text ein")
End