Nutzt man beim Import oder Export den Spezialeditor, stehen eine Reihe von Operationen zur Verfügung, um die Daten zu manipulieren. Jede Zeile im Spezialeditor entspricht einer Feldzuweisung zwischen externen Daten und MIKE URBAN.
Eine Feldzuweisung sieht prizipiell immer so aus:
ZIEL = QUELLE
Bei einem Datenimport spielt MIKE URBAN die Rolle des Ziels. Die MIKE URBAN-Feldnamen stehen daher links vom Gleichheitszeichen, die Feldnamen der externen Daten stehen rechts vom Gleichheitszeichen.
Bei einem Datenexport spielt MIKE URBAN die Rolle der Quelle. Die MIKE URBAN-Feldnamen stehen daher rechts vom Gleichheitszeichen, die Feldnamen der externen Daten stehen links vom Gleichheitszeichen.
Zahlen werden ohne Anführungszeichen angeschrieben. Will man Kommastellen angeben, muss man einen DezimalPUNKT verwenden. Hier wird dem MIKE URBAN-Feld Demand
der Wert 1.5
zugewiesen:
Demand = 1.5
Text wird unter einfache Anführungszeichen gesetzt. Hier wird dem MIKE URBAN-Feld DataSource
der Text Netzdatenbank
zugewiesen.:
DataSource = 'Netzdatenbank'
Feldnamen werden ohne Anführungszeichen angeschrieben. Hier wird dem MIKE URBAN-Feld Thickness
der Inhalt des externen Feldes Wanddicke
zugewiesen.
Thickness = Wanddicke
+ | Addition |
- | Subtraktion |
* | Multiplikation |
/ | Division |
Setzen Sie unbedingt Leerzeichen links und rechts der Operatoren. Im folgenden Beispiel wird der Befestigungsgrad in Prozent aus den absoluten Flächen berechnet:
ImpArea = 100 * ( Dach + Strasse ) / ( Dach + Strasse + Gruen )
Um ein Vorzeichen umzukehren, verwenden Sie nicht "minus…", sondern "Null minus…".
Im folgenden Beispiel sind die Entnahmen im externen Datensatz mit negativem Vorzeichen gespeichert, während MIKE URBAN ein positives Vorzeichen verwendet. Die dargestellte Feldzuweisung führt den Vorzeichenwechsel durch:
Demand = 0 - Entnahme
( | Klammer auf |
) | Klammer zu |
Im folgenden Beispiel wird der Quotient aus Dachfläche und Gesamtfläche gebildet und dann mit 100 multipliziert, um auf Prozentwerte zu kommen.
AISteep = ( DACHM2 / FLAECHEM2 ) * 100
Wenn Sie die Klammer weglassen, führt MIKE URBAN zuerst die Multiplikation aus und dann die Division, was zu völlig falschen Ergebnissen führt.
Zeilen werden zu Kommentaren, indem man ein Hash #
voransetzt:
# Diese Zeile ist ein Kommentar. # # Auch Leerzeilen kann man durch einen Kommentar einfuegen.
Nach einem Ausdruck ist ein Kommentar nicht erlaubt. Die folgende Zeile würde beim Import falsch interpretiert oder gar nicht ausgeführt werden:
InvertLevel = Gelaende - Abstich # unzulaessiger Kommentar
Vermeiden Sie in den Kommentaren Umlaute etc. Spätestens wenn Sie die XML-Datei mit einem externen Editor öffnen und bearbeiten, können Sie in Schwierigkeiten kommen, weil die Zeichenkodierung nicht festgelegt ist.
Width = sqrt(Area * 10000)
berechnet die mittlere SWMM-Einzugsgebietsbreite als Wurzel der Fläche [ha], wobei die Fläche zuerst in m2 umgerechnet wird.
MUID = RemoveSpaces(KnotenID)
konvertiert Wert in Text und entfernt alle Leerzeichen und Tabulatoren. Nützlich, wenn im Externen Datensatz am Anfang oder Ende der KnotenID Leerzeichen importiert werden würden.
MUID = VonKnoten + '-' + NachKnoten
Jede Feldzuweisung lässt sich durch 'WHERE ' mit Bedingungen verknüpfen.
Erlaubt sind die Vergleichsoperatoren
= | gleich |
<> | ungleich |
< | kleiner |
> | größer |
<= | kleiner oder gleich |
>= | größer oder gleich |
Es gibt offenbar keine Möglichkeit, mit einem Teil eines Textes zu vergleichen.
Innerhalb einer Feldzuweisung kann man Bedingungen mittels AND und OR kombinieren.
Die folgende Sequenz verwendet das Feld 'Layer', um einen Rohrdurchmesser zuzuweisen, was sehr praktisch ist, wenn man Daten aus AutoCAD-Zeichungen importiert.
Diameter = 30 WHERE Layer = '_WL_Bestand_DN_30' Diameter = 40 WHERE Layer = '_WL_Bestand_DN_40' Diameter = 50 WHERE Layer = '_WL_Bestand_DN_50' Diameter = 60 WHERE Layer = '_WL_Bestand_DN_60' Diameter = 75 WHERE Layer = '_WL_Bestand_DN_75' Diameter = 80 WHERE Layer = '_WL_Bestand_DN_80' Diameter = 100 WHERE Layer = '_WL_Bestand_DN_100' Diameter = 125 WHERE Layer = '_WL_Bestand_DN_125' Diameter = 150 WHERE Layer = '_WL_Bestand_DN_150' Diameter = 200 WHERE Layer = '_WL_Bestand_DN_200'
Bedingungen durch UND verknüpfen:
DataTypeName = 'Water Level' WHERE (TypeNo = 100) AND (BcTypeNo = 1)
Will man mehrere Bedingungen durch ein ODER verknüpfen, schreibt man sie am besten in mehrere Zeilen:
# Schmutzwasser NetTypeNo = 1 WHERE Kanalart = 'KS' NetTypeNo = 1 WHERE Kanalart = 'DS' # Regenwasser NetTypeNo = 2 WHERE Kanalart = 'KR' NetTypeNo = 2 WHERE Kanalart = 'DR' # Mischwasser NetTypeNo = 3 WHERE Kanalart = 'KM' NetTypeNo = 3 WHERE Kanalart = 'DM'
Auf leere Felder prüfen:
# leeres Feld ... WHERE Feld = NULL # # nicht leeres Feld ... WHERE Feld <> NULL
Mittels LookUp
kann man Werte aus einer anderen Tabelle einlesen.
LookUP("SuchTabelle","SuchSpalte",Eingangswert,"RückgabeSpalte")
Mit dem Eingangswert wird in der "Suchspalte" der "Suchtabelle" nach einem passenden Wert gesucht. In der ersten Zeile mit einem Treffer wird der Wert aus der "Rückgabespalte" gelesen und an den LookUP zurückgegeben.
Als Suchtabelle kommt sowohl eine Quelltabelle in Frage, als auch eine bereits in MIKE URBAN vorhandene Tabelle.
Das folgende Beispiel zeigt den Import von Schächten, wenn keine Schachtsohle gegeben ist. LookUP geht mit der SchachtID in die Tabelle "Haltungen" und sucht in der Spalte "Schacht_oben" nach der abgehenden Haltung. Sobald die abgehende Haltung gefunden ist, wird in der gleichen Zeile der Wert in der Spalte "Rohsohle oben" zurückggegeben und in InvertLevel (das ist die Schachtsohle in MIKE URBAN) geschrieben. Falls es mehrere abgehende Haltungen mit unterschiedlichen "Rohrsohlen oben" gibt, könnte natürlich der falsche Wert erwischt werden!
InvertLevel = LookUP("Haltungen","Schacht_oben",SchachtID,"Rohrsohle_oben")
Die folgenden Zeilen stehen am Ende einer Importroutine für Wasserbedarfsdaten. Mit einem LookUp
wird geprüft, ob der Bedarf sich auf einen Knoten bezieht, der im Netz vorhanden ist. Wenn der Knoten nicht vorhanden ist, wird der Datensatz gelöscht, statt importiert.
Var_ExistingJunction = NULL Var_ExistingJunction = LookUP("mw_Junction","MUID",JunctionID,"MUID") DeleteRecord WHERE Var_ExistingJunction = NULL
Das WHERE
nach dem DeleteRecord
ist zwingend notwendig. Wenn Sie keine Bedingung benötigen, schreiben Sie
DeleteRecord WHERE 1=1
Mit dem Befehl Log() können Sie Meldungen in die Datei "all-utf8.log" schreiben, die Sie im folgenden Verzeichnis finden:1)
MIKE URBAN 2016: c:\Users\<IhrBenutzername>\AppData\Local\DHI\2016\MIKE URBAN\all-utf8.log
MIKE URBAN 2014: c:\Users\<IhrBenutzername>\AppData\Local\DHI\2014\MIKE URBAN\all-utf8.log
Die Klammer muss ohne Abstand auf das Log()
folgen, mit Log ()
provozieren Sie eine Fehlermeldung!
Der folgende Befehl schreibt die aus Geländehöhe und Schachttiefe berechneten Schachtsohlen in die Log-Datei:
Invertlevel = Gelaende - Tiefe Log(Gelaende - Tiefe)
Sie können sich mit Log()
nur auf die externen Daten beziehen. Daher führt der folgende Befehl nicht zum gewünschten Ergebnis:
Invertlevel = Gelaende - Tiefe Log(Invertlevel)
Falls eine globale Variable definiert wurde, könnten Sie aber folgendermaßen vorgehen:
Var1 = Gelaende - Tiefe Log(Var1)