How to BScript


In diesem Manual wird:

für Input-Code und
für Output-Code verwendet.


Einleitung

Kurzbeschrieb

BScript ist eine Script-basierte Programmiersprache für CAD Anwendungen. Die Sprache verfügt neben Kontrollstrukturen (“wenn, dann”-Bedingungen, Schleifen, etc.) über rund 300 leistungsfähige Befehle, welche erlauben, geometrische Berechnungen durchzuführen, sowie Abläufe von technischen Prozessen effizient zu programmieren.
BScript verfügt auch über eine Schnittstelle zu Unigraphics (NX), mit der über die User-Functions Operationen ausgeführt und graphische Objekte ausgetauscht werden können.

Installationsformen von BScript

Die BScript-Software kann entweder als eigenständiges Programm (BScript.Runtime) genutzt werden, oder als AddOn zu NX (BScript.NX). Das BScript.NX ist abhängig von der Version von NX. Zurzeit stehen folgende Versionen zur Verfügung: NX_60, NX_80 und NX_85.

BScript-Window_neu

Seit 2016 existiert das BScript Studio von SoftART, welches analog dem Visual Studio von Microsoft aufgebaut ist und ähnlich funktioniert. BScript Prozeduren können so einfacher geschrieben und debugged werden.

Da BScript Projekte bestehend aus mehreren Dateien keinen eindeutig definierten Haupteinstiegspunkt haben (Main Methode), muss der Programm-Stack beim BScirpt Studio explizit mit dem Haupt-Script initialisiert werden. Ein bestehender Ausführungsstack (von möglich vorangehenden unabgeschlossenen Scripts) wird dabei gelöscht. Aus Komfortgründen kann ein Main-Script durch einen Klick auf Main spezifiziert werden. Restart initialisiert dann den Stack und startet die Ausführung.
Wird Run gedrückt und ist der Stack leer, wird das aktuell geöffnete File als Einstiegspunkt auf den Stack gelegt. Die Position des Programmzeigers (kleiner gelber Pfeil) kann mit der rechten Maustaste gesetzt werden, falls die Ausführung pausiert ist. Dies ist sehr praktisch beim Debuggen, da eine Zeile zu Testzwecken oft mehrmals hintereinander ausgeführt werden muss. Break-Points setzt man mit der linken Maustaste, wie in Visual Studio.

Verwendung von Prozeduren

Um Code nicht immer wieder zu schreiben, kann dieser in BScript-Prozeduren gespeichert werden. Diese Textfiles mit der Endung .bsp können in einem beliebigen Texteditor verändert werden.
BScript verfügt über Befehle zum Laden dieser Prozeduren, sowie Hilfen zum einfacheren Debuggen. So kann eine Prozedur auch weitere Prozeduren aufrufen und nach deren Ende im eigenen Code weiterfahren.
Mit ADD F=Prozedurname wird eine Prozedur gestartet und der darin enthaltene Code durchgelaufen. Die bearbeiteten Codezeilen und allfällige Outputs werden im Ausgabefenster des BScript-Windows angezeigt. Hilfreiche Befehle für das Debuggen finden sich im Kapitel "Tipps für einfacheres Debuggen" gegen Ende dieser Seite.

Verwendung von Funktionen

Zusätzlich zu den Prozeduren gibt es die Möglichkeit, Funktionen (BFunctions) aufzurufen. Während bei einem Prozeduraufruf der Workspace und die Symboltabelle gleich bleiben, wird die Funktion in einer neue BScript-Instanz aufgerufen. Somit müssen alle benötigen Variablen und Elemente übergeben werden und alle temporären Elemente werden am Ende der Funktion verworfen.
Zudem können die Funktionen parallelisiert werden. Es können in einem Loop mehrerer Funktionen gestartet werden und anschliessen in einem zweiten Loop auf deren Beendigung gewartet werden. So können rechenintensive Aufgaben etwas beschleunigt werden.
Die genaue Syntax zur Verwendung von Funktionen wird im Kapitel „BFunctions“ detailliert erklärt.

BScript-Grundlagen

Datenstrukturen

Es gibt 2 Arten von Daten: Variablen und Elemente. Variablen sind Einzelwerte oder Wertegruppen. Elemente können Punktmengen, BSpline-Linien, Flächen etc. sein.

Variablen

Variablen sind selber definierte Werte (beliebiger Dimension) oder Resultate aus Berechnungen oder Funktionen. Sie müssen immer mit einer Definition initialisiert werden.
Es gibt drei Typen von Variablen: Integer (ganze Zahlen), Real (reelle Zahlen) und Character (Text). Bei der Definition einer Variable muss der Typ (:I, :R oder :C) zwingend angegeben werden. Variablen können jederzeit überschrieben werden und gelten global.

Achtung: Ein Symbol muss immer mit einem Doppelpunkt vor dem Namen gekennzeichnet werden! Zum Ersten bei der Definition (DEF), danach bei jedem Gebrauch (siehe nachfolgende Beispiele).

 Beispiel:

C Definition von Reellen Zahlen:
DEF :R:PLOP=18.09132008
DEF :R:R1=(200*:PI) ! PI ist bereits vordefiniert und kann jederzeit verwendet werden.
DEF :R:W1=(360/15)
DEF :R:VT=0,-110,0 ! Definition eines 3D-Vektors

C Definition eines Integer-Wertes:
DEF :I:L1=200
DEF :I:UT=:L1/3 ! Ist das Resultat keine ganze Zahl, wird der abgerundete Integerwert übernommen.

C Definition eines Characters:
DEF :C:TEXTOUTPUT="'AUFTRAG : '+:L1+' Liter Wein'"

C Um einen Realwert mit beliebigen Anzahl Stellen in einen Textstring zu wandeln wird die Funktion #FF verwendet:
DEF :C:TX="'Der Radius beträgt ca. '+#FF(:R1,6,2)"

Will man mit Vektoren rechnen, muss man nicht jede Dimension einzeln berechnen, sondern kann die Operation direkt über die mathematischen Operatoren ausführen:
DEF :R:VT=1,4,3
DEF :R:V2=2*:VT

Konvertierungen zwischen den Variable-Typ (Int, Real und Character)

Grundsätzlich kann im BScript jeder Variable-Typ ohne spezielle Notation in einen anderen Typ gewandelt werden:
DEF :R:A1=3.3333
DEF :I:A2=:A1 ! Der Wert wird dann 3
DEF :C:A3=:A1 ! Der Wert wird dann '3.3333'
DEF :C:A4=:A3 ! :A4=:A1
Beim Wandeln von Real in Char wird empfolen, die Funktion #FF zu benutzen, damit die Länge des Textes gesteuert werden kann.

Konvertierung von Elementen in Variablen und umgekehrt

Um den Inhalt von Workspace-Elementes auszulesen, stehen einige WS-Funktionen (#WS..) zur Verfügung. So können z.B. einzelne Punkte eines Elements abgefragt werden (#WSGG) oder Berechnungen ausgeführt werden (z.B. den Mittelwert einer Spalte (#WSAVG)).
Umgekehrt können die Variablen direkt bei der Definition von Elementen benutzt werden.

 Beispiel:

C 2 Punkte definieren (als Variable):
DEF :R:P1=0,0,0
DEF :R:P2=100,100,100

C Definition eines Punkt-Elements mit den beiden Punkten:
ESTA ND=GERADE_1
E G=:P1
E G=:P2
EEND

C Transformation des Elements mit dem Transformations-Element TT (muss zuerst mit TRASYS erstellt werden)
TRAFOR NE=GERADE_1 NT=TT

C Zurücklesen der Punkte in Variable:
DEF :R:P1_T=#WSGG(GERADE_1,1)
DEF :R:P2_T=#WSGG(GERADE_1,2)

Elemente (Felder)

Elemente bestehen aus einer Zeile mit der Definition des Elementes (ESTA), dann beliebig vielen Zeilen mit dem Inhalt des Elementes (beginnend mit (E G=) und endend mit einer Schlusszeile (EEND).

 Beispiel:

ESTA ND=TEST LGRU=3
E G=-100,0,0
E G=0,100,0
E G=100,0,0
E G=0,170,0
E G=-100,0,0
EEND
ESTA_col
Die von BScript vorgegebene Struktur ist rot, die vom User zu definierenden Teile sind grün eingefärbt.

Als nächstes eröffnen wir ein Kreis-Geraden-Element (Gebilde aus beliebiger Abfolge von Geradenabschnitten und Kreisbögen). Dabei wird klar, dass nicht jede Zeile innerhalb eines Elementes gleich aufgebaut sein muss. Die Geradenabschnitte brauchen nur X/Y-Koordinaten, während die Kreisbögen zusätzlich einen Radius und Start- oder Endwinkel benötigen:

 Beispiel:

KGSTA ND=LINIE ICL=1 ! ICL ist eine Option der Linie (dessen Bedeutung siehe Manual)
KG X=10 Y=50
KG X=40 Y=70
KG X=70 Y=70 R=12 FIS=180
KG X=90 Y=70 R=12 FIE=0
KG X=150 Y=70
KG X=130 Y=50 R=-20
KG X=85 Y=30 R=10
KG X=35 Y=40 R=-25
KGEND ! Hier schliessen wir das Element

Die folgende Animation zeigt die schrittweise Entstehung des Elementes:
KG-Element Animation

So sieht das Element dann in NX aus:
KG

BScript hat diverse Befehle für den Umgang mit Elementen.
Hier eine kleine Auswahl:
TYPE : Das Element wird mit dem Befehl TYPE ausgelistet (für den zugehörigen Output siehe das Beispiel "Zugriff auf den Workspace" im Kap. "Interner Speicher"). Handelt es sich um ein grosses Element, kann die Ausgabe mit Hilfe von Tags beschränkt werden.
EDIT : Mit diesem Befehl können einzelne Werte oder ganze Gruppen eines Elementes geändert werden.
COPY : Mit COPY lassen sich bestehende Elemente kopieren.
SET : Mehrere Elemente können zusammen in einem Set gespeichert werden. Dies ist beispielsweise nützlich für den Export von Resultaten in Text- oder Binärfiles oder der Bearbeitung von vielen gleichartigen Elementen mittels einer Schleife.
Siehe hierzu die Beispiele im Kapitel "Beispiele zu Befehle und Funktionen".
Die Verwendung von Befehlen ist in dessen Kapitel, sowie dem Manual genauer beschrieben.


Speichermöglichkeiten

Interner Speicher

Jede erzeugte Speicherstruktur – Elemente und Variable – wird für die Dauer einer BScript-Session zwischengespeichert. Elemente landen im Workspace, Variable in der Symboltabelle (siehe Bild im Kapitel BScript-Window).
Sämtliche im Workspace und der Variabelliste enthaltenen Elemente und Variabeln können mit dem Befehl SNAPSHOT,W (write) zusammen als ein File gespeichert werden.
Um diese gespeicherten Files zu lesen wird der Befehl SNAPSHOT,R (read) verwendet.

 Beispiel:
 !Bemerkung: hier wurden vorgängig schon die Elemente LINE und TEST definiert
DIR ! Alle Elemente/Variablen des Workspace-Directory auflisten
TYPE NE=TEST ! Inhalt des Workspace-Elements TEST anzeigen

Diese zwei Eingabezeilen bewirken folgende Ausgabe:


DIR

Elementname Element Type Group Length # of Groups

LINIE BCurve 4 57
TEST BPoints 3 5

Number of objects : 2

TYPE NE=TEST

BPoints TEST
------------

Points :

Part 1
1 -100.000000 0.000000 0.000000
2 0.000000 100.000000 0.000000
3 100.000000 0.000000 0.000000
4 0.000000 170.000000 0.000000
5 -100.000000 0.000000 0.000000

Number of groups : 5
Number of parts : 1
 Beispiel:

DEF,P NP=:R1 ! Ausgabe Variable-Inhalt (siehe Befehle)
DEF,P NP=:VT
DEF,P NP=:TX
DEF,D ! Ausgabe Variable-Tabelle (siehe Befehle)

BScript Ausgabe:


DEF,P NP=:R1

R1 628.318530717959
DEF,P NP=:VT

Table of Variables :

Name Value
VT 0
VT(2) -110
VT(3) 0

DEF,P NP=:TX

TX Der Radius beträgt ca. 628.32
DEF,D

Table of Variables :

Name Value
$CURRENTPROCEDURE
$DEFDIR C:\Program Files\Siemens\NX80\UGII
$NOWAIT false
$PROGRAM CSharp
$VERSION 1.3.6.15971
E 2.71828182845905
L1 200
PI 3.14159265358979
R1 628.318530717959
TEXTOUTPUT AUFTRAG : 200 Liter Wein
VT 0
VT(2) -110
VT(3) 0
W1 24

Externer Speicher

Elemente und Sets können mit dem Befehl SAVE in Text- oder Binärfiles geschrieben werden. Variablen kennen keinen Befehl zur Speicherung, da sie meist relativ einfach rekapituliert werden können. Falls gewisse Variablen trotzdem gespeichert werden sollen, können diese in ein Element geschrieben und so gespeichert werden.
(ESTA ND=VAR / E G=:VARIABLE / EEND / SAVE,B NE=VAR F=Variable.bin)
Mit LOAD werden Elemente oder Sets aus Dateien wieder geladen.


Geometrische Elemente

Punkt

Ein einzelner Punkt kann entweder als Symbol (3D Vektor) oder als BPoint-Element mit nur einer Gruppe definiert werden. Wenn mit dem Punkt vor allem Vektorrechnungen gemacht werden, empfiehlt sich die erste Variante, wenn geometrische Berechnungen durchgeführt werden sollen (z.B. Abstand auf Flächen) braucht es die zweite Variante.

Punktmenge

Eine Punktmenge definiert eine Gruppe von Punkten, welche einen Zusammenhang haben. Die Anzahl der Punkte ist frei wählbar (es sind auch leere Punktemengen möglich) und darf sich während des Programmablaufs auch ändern.
Es ist auch möglich, Punktmengen mit einer Gruppenlänge (LGRU) grösser als 3 zu definieren. In diesem Fall müssen die ersten 3 Werte x, y, und z definieren und danach können Zusatzinformationen gespeichert werden.

Geradenelement/Vektorelement

Dieses Element erweitert die Punktmenge durch einen Richtungsvektor für jeden Punkt. Das Element hat somit eine fixe Gruppenlänge von 6 (x,y,z,vx,vy,vz).

Ebene

Die Ebene im Raum ist definiert durch einen Raumpunkt und den Normalenvektor der Ebene. Um Berechnungen auf der Ebene ausführen zu können, wird zusätzlich noch eine lokale Richtung vx definiert. Die Ausdehnung der Ebene ist unendlich.
Die Ebene wird im Format x, y, z, vnx, vny, vnz, vly, vly, vlz gespeichert.
Zusätzlich gibt es die Möglichkeit, eine begrenzte Ebene als BSpline Fläche mit 4 Gitterpunkten zu definieren (Befehl EBN,B).

Zylinder

Kegel

Torus

BSpline-Elemente

BSpline-Elemente
Freiform Elemente im BScript basieren auf der B-Spline-Theorie. Um mit BScript zu arbeiten, muss diese Theorie nicht verstanden werden, für höhere geometrische Berechnungen ist es jedoch nützlich. Wichtig zu wissen ist, dass B-Spline-Elemente immer ein U/V-Gitter besitzen, welches ein lokales (! nichtlineares) Koordinatensystem des Elementes bilden.

Für die interessierten Leser ist hier die wichtigste BSpline -Theorie zusammengefasst. Details zu der NURBS-Theorie ist am Besten auf Wikipedia nachzulesen.


Kontrollstrukturen

BScript kennt zwei unterschiedliche Arten von Kontrollstrukturen: Befehle und Funktionen.
Grob kann man wie folgt unterteilen:
Befehle greifen (mehrheitlich) auf Elemente zu und umfassen geometrische Berechnungen/Transformationen, BScript-Steuerungen, Organisation des Workspace, graphische Outputs und NX-Steuerung. Als Code sieht das folgendermassen aus: BEFEHL,OPTION TAG1=wert1 TAG2=wert2 ... . Dabei variiert die Anzahl und Notwendigkeit von Optionen und Tags von Befehl zu Befehl und je nach gewünschter Verwendung.
Funktionen greifen (mehrheitlich) auf Variablen zu und umfassen mathematische Berechnungen, Vektorrechnungen (an BSplines), und Zugriff auf den Inhalt von Elementen im Workspace. Als Code sieht das folgendermassen aus: OUTPUT = #FUNKTION(PARAMETER1,PARAMETER2,...)

Befehle

Der Aufbau eines Befehls am Beispiel von ABST (Abstand von Punkten auf Kurve/Fläche):

ABST,B NF=FDS NE=PUN ND=APUN NDUV=UVP
FDS
Name der Input-Kurve
PUN
Name des Input-Punktearrays
APUN
Name des neu generierten Output-Elementes
UVP
Name der neu generierten Output-UV-Punktmenge
,B
Option des Befehls. In diesem Fall bewirkt sie, dass Punkte ausserhalb der Boundary der Fläche ignoriert werden.
NF NE ND NDUV
Tags mittels welchen In- oder Outputs dem Befehl angegeben werden.

Es ist nicht immer zwingend, alle Tags anzugeben. In bestimmten Fällen verlangt eine Option zusätzliche Tags, diese sind dem Manual zu entnehmen. Als Merkhilfe sei erwähnt: NE - Name des Existierenden Elements, ND - Name des zu Definierenden Elements.

Beispiele zur Verwendung von Schleifen und zur Flusskontrolle finden sich im Kapitel "Beispiele zu Befehle und Funktionen".

#-Funktionen

Der Aufbau einer Funktion am Beispiel von #BCTANVU (Tangentenvektor einer Kurve bei einem gegebenen U-Wert berechnen):

DEF :R:VT = #BCTANVU(LINIE,0.26)
LINIE
Name der Input-Fläche
0.26
U-Wert auf der Kurve

 

Eine Gruppe der Funktionen erlauben den Zugriff auf den Workspace. So können z.B. auf einzelne Einträge oder Werte in Elementen zugegriffen werden, die Anzahl Einträge eines Elements abgefragt werden oder Extremwerte berechnet werden.
Hier ein Beispiel, bei welchem der Maximalwert aus der zweiten Spalte (=Y-Wert) des Elementes LINE abgefragt wird.

DEF :R:YMAX = #WSMAX(LINE,2)
LINIE
Name der Input-Kurve
2
Index der Wertkolonne

 

Achtung: BScript zählt von 1 aus!

Die Funktionsnamen erscheinen auf den ersten Blick etwas kryptisch. Mit etwas Übung findet sich die benötigte Funktion jedoch schnell, da die einzelnen Buchstaben meist für wichtige Bestandteile der Funktion stehen.
Der Funktionsname #WSGSNN bedeutet in etwa "from WorkSpace Get from a Set the element-Name of the N'th element".
Alle BScript-Funktionen sind im Manual beschrieben.

BFunctions


Bemerkungen und hilfreiche Tipps

Ungeschriebene Gesetze

  1. BScript-Code wird nur in Grossbuchstaben geschrieben. (Allerdings ist der Script-Analyzer nicht Case Sensitiv)
  2. Variablen- und Elementnamen sind mindestens 3 Charakter lang. Ausnahmen sind nur innerhalb einer kleinen Schleife verwendete Namen und Laufziffern.
  3. Laufziffern werden gewöhnlich als :I, :J, :K bezeichnet.
  4. Es lohnt sich, wenn bei Elementen aus dem Namen sichtbar wird, von welcher Art sie sind: z.B. F.. für Flächen, L… für Linien/Kurven, P… für Punktmengen.

Tipps für einen schönen Code

  1. Jede BScript-Routine sollte Titelzeilen tragen, in denen der Name der Routine, Programmierer, Datum und Projekt vermerkt ist.
  2. Befehle wie ADD und LOAD sollen zu Beginn einer Routine aufgerufen werden.
  3. Innerhalb Schlaufen (DO) empfiehlt es sich die Zeilen mit Blanks einzurücken, damit der Code einfacher lesbar wird. Zudem wird eingerückt nach IF/ELSE, ESTA, KSTA, KGSTA und GSTA. Also bei allen Befehlen, beim welchen eine Art Klammer gebildet wird.
  4. BScript-Code sollte mittels Überschriften möglichst einfach verständlich gegliedert werden.
  5. Um den Code mit Kommentaren zu verwenden, verwendet man nach dem Code ein !, oder auf eigener Zeile ein C.
    C Abschnitt, in dem wir die Kreiselemente berechnen
    DEF :R:R1=(200*:PI) ! Radius des Kreises 
  6. Da BScript Prozeduren relativ lang werden können, lohnt es sich den Code mit Zwischentiteln aufzugliedern.
    C -------------------------------
    C EINSTELLUNGEN FÜR SAUGSEITE
    C -------------------------------
    

Achtung: Niemals Tabs verwenden!

Achtung: Ein Blank vor einem Kommentar-C erzeugt einen Fehler!

Tipps für einfacheres Debuggen

BScript enhält einige Befehle zum Debuggen:
WAIT,I unterbricht das Abarbeiten der Routine und gibt dem User die Möglichkeit zu überprüfen ob die Berechnung wie gewünscht abläuft. Mit der Eingabe von ADD,C in der Konsole wird die Berechnung fortgesetzt. Fügt man in der WAIT-Zeile einen eindeutigen !-Kommentar an, erkennt man auch einfach, wo im Code man gerade gehalten hat.
Der Befehl ECHO AUS bzw. ECHO EIN stoppt bzw. startet die Wiedergabe des abgearbeiteten Codes in der Konsole. Die wiederholte Anzeige von Schlaufen kann so vermieden und die Bearbeitungsgeschwindigkeit gesteigert werden.
Bevor eine Routine erneut aufgerufen wird, sollten die Befehle DEL,ALL und UGDEL,ALL ausgeführt werden, um den Workspace bzw. die NX-Anzeige zu leeren.

Tipps für mehr Spass mit BScript

In der Praxis von SoftART hat sich herausgestellt, dass sich der Editor UltraEdit oder Notepad++ am besten eignet für das Programmieren mit BScript. Er bietet nützliche Werkzeuge wie den Block-Edit-Modus, Tastatur-Shortcuts und sprachbasierte Text-Einfärbung.
Falls Sie mit UltraEdit arbeiten können Sie von uns das BScript-Wordfile erhalten, welches Ihren Code nach BScript-Regeln einfärbt und so die Übersicht in Ihren Routinen massgeblich verbessern kann!

BScript Manual

Auf der Homepage von SoftART ist das gesamte BScript-Manual aufrufbar, in welchem alle Befehle und Funktionen beschrieben sind.

Beispiele zu Befehle und Funktionen

Die folgenden Beispiele sind so aufgebaut, dass sie direkt per Copy/Paste ins BScript-Window eingefügt werden können. Dies sind typische Beispiele von Anwendungen, welche häufig vorkommen.


UGPART,C NE=WORK.PRT
FILE,D NE=WORK.PRT
UGPART,L F=D:\Temp\NX_Start.prt
WAIT T=1
UGPART,S F=WORK.PRT
UGLAYER N=1
Schleife über gleichverteilte U/V-Werte einer Kurve/Fläche (Beispiel: V-Konst. Linien aus einer Fläche extrahieren und in Set abspeichern.)


DO REPEAT=:NB :I:I=1
DEF :R:VVAL=(:I-1)/(: NB-1)
DEF :C:NAME=”’LINE_’+:I”
EXTRA,V NF=EFLA ND=:NAME V=:VVAL
SET,A ND=LINESET NE=:NAME
DEF :I:I=:I+1
ENDDO

#FF() ! Achtung: Der Dezimalpunkt zählt auch als eine Stelle! Um die Parameter sinnvoll auszufüllen ist es also nützlich, die ungefähre Zahllänge zu kennen. ! #FF rundet ! Gesamtzahl sehr hoch, dann mit #STRTRIM() abschneiden. Oder im Voraus Position des Punktes mit #STRLEN und #LOCATE herausfinden.


WRITE T=“‘PI mit 10 Nachkommastellen ist gleich ‘+#FF(:PI,12,10)“
Hier ein Beispiel, in welchem mit Hilfe einer Schleife die Summe aller Z-Werte aller in einem Set befindlichen Elementen aufaddiert wird.


ESTA ND=TEST1 LGRU=3       ! Zuerst definieren wir drei Elemente.
E G=-100,0,50
E G=0,100,20
EEND

ESTA ND=TEST2 LGRU=3
E G=100,0,80
E G=0,170,0
E G=-100,0,30
EEND

ESTA ND=TEST3 LGRU=3
E G=0,100,-10
E G=50,180,40
E G=100,0,0
E G=0,120,0
EEND

SET ND=TESTSET NE=TEST1,TEST2,TEST3     ! Elemente in Set fügen

DEF :R:SUMVAL=0                         ! Summe initialisieren
DEF :I:NSE=#WSNSE(TESTSET)           ! Anzahl der Elemente im Set

DO REPEAT=:NSE :I:I=1                ! Schleife (:NSE Durchgänge)
DEF :C:NAME=#WSGSNN(TESTSET,:I)       ! Name des n-ten Elemetes
DEF :R:VAL=#WSSUM(:NAME,3)              ! 3. Wert der 1. Wertgruppe
DEF :R:SUMVAL=:SUMVAL+:VAL              ! :VAL zu :SUMVAL addieren
DEF :I:I=:I+1                           ! Laufvariable hochzählen!
ENDDO

DEF,P NP=:SUMVAL                        ! Output Resultat. Hier: 210
DEF :C:KLASSE="undefiniert"
IF C=(:SUMVAL>0)       ! Definition von :SUMVAL siehe Beispiel zu Schleifen
DEF :C:KLASSE="positiv"
ELSE
DEF :C:KLASSE="negativ"
ENDIF

DEF,P NP=:KLASSE

C Der IF-Block funktioniert, beachtet aber die Möglichkeit :SUMVAL=0 nicht. Dazu werden zwei IF-Blöcke ineinander verschachtelt:

DEF :C:KLASSE="undefiniert"
IF C=(:SUMVAL>0)       ! Definition von :SUMVAL siehe Beispiel zu Schleifen
DEF :C:KLASSE="positiv"
ELSE
IF C=(:SUMVAL=0)
DEF :C:KLASSE="null"
ELSE
DEF :C:KLASSE="negativ"
ENDIF
ENDIF

DEF,P NP=:KLASSE


Übungsbeispiele

Hoch