Foreach |
Top Previous Next |
Befehl zur Schleifenbildung: Foreach führt einen Befehl für jedes „Objekt“ aus, das über die Pointer-Liste (ptr-liste) übergeben wird. Als „Objekt“ können in diesem Zusammenhang neben den echten Moskito-Objekten auch andere Objekttypen wie Elemente, Texte, Symbole oder Pläne verstanden werden Die Aufrufsyntax dieser Funktion ist fest vorgegeben: Foreach <objekttyp> IN <ptr-liste> {BLOCK <blockgroesse> <rand>} DO <commands>. Die Schlüsselwörter „IN“, „BLOCK“ und „DO“, sowie der Objekttyp müssen in Großbuchstaben angegeben werden.
Voraussetzung Parameter <typ> POINT, ELEMENT, ATTRIB, TEXT, SYMBOL, STRING, OBJECT, PLAN, RASTER, SET, MASTER und MEMBER <ptr-liste> Eine Liste der Objektzeiger, z.B. aus einem DBquery - Befehl. {blockgroesse} In bestimmten Situationen kann es aus Gründen der Performance sinnvoll sein, daß für jeden Schleifendurchlauf die Selektionsmenge verkleinert wird, insbesondere dann, wenn Foreach geschachtelt verwendet wird. Die ursprüngliche Selektionsmenge wird dann räumlich in Blöcke aufgeteilt und der Reihe nach abgearbeitet, d.h. es werden zuerst alle Objekte des ersten Blocks bearbeitet. Dabei wird auch die Selektionsmenge auf den Bereich des ersten Blocks begrenzt. Der Parameter blockgroesse gibt in Metern an, wie groß die einzelnen Blöcke sind. {rand} rand gibt an, um wieviel Meter der Bereich der Selektionsmenge in jedem Durchgang größer sein soll als der eigentliche Block. commands die Befehle, die für jedes Objekt vom o.g. Typ durchgeführt werden sollen. /H Mit diesem Schalter wird ein Hilfetext und die Aufrufkonvention angezeigt. Rückgabewert
Beispiele Foreach PLAN in DBquery($pointer from plan /noq) DO „Echo(DBquery($name from open plan /noq))“ ES WIRD DER NAME EINES JEDEN EINGESCHALTETEN PLANES ANGEZEIGT. Foreach ELEMENT IN DBquery($pointer FROM ELEMENT /noq) BLOCK 50 5 DO "vel" ZEIGT DIE EIGENSCHAFTEN FÜR JEDES ELEMENT IM PLAN AN
AUFRUF VON PROZEDUREN
DefineProcedure Test Declare AnzahlDerElemente Pointer Value Pointer DBquery($pointer from Open Object /NOQ ) Value AnzahlDerElemente DBquery($numElems FROM OPEN OBJECT /NOQ ) Echo Das Objekt mit dem Pointer Value(Pointer) hat Value(AnzahlDerElemente) Elemente EndProcedure
Foreach OBJECT in DBquery($pointer FROM OBJECT /noq) do "Test" LIEFERT MITTELS OBIGER PROZEDUR FÜR JEDES OBJEKT POINTER UND ANZAHL DER ELEMENTE DefineProcedure Test Declare Position Value Position DBquery($pos.1.$x,$pos.1.$y FROM OPEN STRING /NOQUOTE ) Echo Value(Position) EndProcedure
Foreach STRING in DBquery($pointer FROM STRING /noq) do "Test" LIEFERT MITTELS OBIGER PROZEDUR FÜR JEDEN STRING DIE XY –KOORDINATEN VOM ERSTEN PUNKT
AUFRUF MIT BEDINGUNGEN
Foreach Text in DBquery($pointer FROM TEXT DKY 19652 /noq ) do "Test" FÜHRT DIE PROZEDUR „Test“ NUR FÜR DIE TEXTE AUS, DIE DEN „DKY“ „19652“ HABEN
Foreach Object in DBquery($pointer FROM Object QTX $key.1 EQ 5000 /noq ) do "Test"
FÜHRT DIE PROZEDUR „Test“ NUR FÜR DIE OBJEKTE AUS, WELCHE ALS ERSTEN SCHLÜSSEL DEN SCHLÜSSEL 5000 HABEN (Zusatzschlüssel bleiben so unberücksichtigt).
Siehe auch
|