Import Export - Feldzuweisung

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.

Grundsätzlicher Aufbau

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

Operatoren

+	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

Klammern

Setzen Sie auf jeden Fall Klammern, wenn es auf die Reihenfolge der Operatoren ankommt! "Punktrechnung vor Strichrechnung" wird von MIKE URBAN nicht berücksichtigt, und selbst bei gleichrangigen Operatoren kann man Überraschungen erleben.
(	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.

Funktionen

Quadratwurzel

Width = sqrt(Area * 10000)

berechnet die mittlere SWMM-Einzugsgebietsbreite als Wurzel der Fläche [ha], wobei die Fläche zuerst in m2 umgerechnet wird.

Textbereinigung

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.

Textverkettung

MUID = VonKnoten + '-' + NachKnoten

Bedingungen

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

Tabellen verknüpfen (LookUp)

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")

Datensätze löschen

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

Meldungen abestzen

Mit dem Befehl Log() können Sie Meldungen in die Datei "all-utf8.log" schreiben, die Sie im folgenden Verzeichnis finden:1) In Versionen vor 2009 befand sich diese Datei in "C:\Programme\Gemeinsame Dateien\DHI\", in den Versionen 2009 bis 2012 im Verzeichnis "C:\Dokumente und Einstellungen\<IhrBenutzername>\Lokale Einstellungen\Anwendungsdaten\DHI\<2009>\MIKE URBAN".

MIKE URBAN 2016: c:\Users\<IhrBenutzername>\AppData\Local\DHI16\MIKE URBAN\all-utf8.log

MIKE URBAN 2014: c:\Users\<IhrBenutzername>\AppData\Local\DHI14\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)

Offene Punkte

Wie weist man einem Feld den Wert NULL zu? Mit Targetfield = NULL? Kann sinnvoll sein, um beispielsweise einen speziellen Wert in einer Shape-Datei, beispielsweise 9999 durch NULL zu ersetzen.