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

Wert

Beschreibung

0

Aufruf wurde erfolgreich durchgeführt

sonst

Fehler aufgetreten

 

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

DBquery()