Page Title

Der Wiki wird derzeit überarbeitet: neue URL, neues Design, neue Inhalte!

Benutzer-Werkzeuge

Webseiten-Werkzeuge


mikeurban:anleitungen:berechnungen_vbscript

Berechnungen mit Visual Basic Script

Berechnungen mit Visual Basic Script werden in MIKE URBAN eingesetzt, um

  • mit der Feldberechnung (Field Calculator) Werte in einer Tabellenspalte zu berechnen, und
  • komplexere Beschriftungsausdrücke (Label) zu erstellen.

Eine komplette Referenz bietet zB. das VBScript-Sprachverzeichnis.

Konvertierung

Rundung

Siehe auch FormatNumber!

Round

Gibt eine auf die angegebene Anzahl Dezimalstellen gerundete Zahl zurück. Lässt man die Anzahl der Dezimalstellen weg, wird auf ganze Zahlen gerundet.

Round(Ausdruck[, AnzDezimalstellen])
Round([Laenge], 2)
Laenge Ergebnis
47,224 47,22
47,225 47,22
47,226 27,23
47,234 47,23
47,235 47,24
47,236 47,24

Es wird nach wissenschaftlichen Prinzipien gerundet. Wenn beide Zahlen gleich weit entfernt sind, wird

  • abgerundet, wenn die letzte vebleibende Stelle gerade ist (47,225), und
  • aufgerundet, wenn die letzte verbleibende Stelle ungerade ist (47,235).

Dadurch ist gewährleistet, dass der Mittelwert einer Datenmenge nach dem Runden gleich bleibt, weil im Mittel genauso oft auf- wie abgerundet wird.

Zeichenfolgen

Left

Gibt eine bestimmte Anzahl von Zeichen ab dem ersten (linken) Zeichen einer Zeichenfolge zurück.

Left(Zeichenfolge, Länge)

Mid

Syntax

Gibt eine bestimmte Anzahl von Zeichen aus einer Zeichenfolge zurück.

Mid(Zeichenfolge, Start[, Länge])
  • Start: legt den Beginn des Ausschnitts fest. Das erste Zeichen der Zeichenfolge hat die Position 1!
  • Länge: Die Angabe der Länge ist optional.

Beispiel

Mid([Profil],4,Len([Profil])-5)
Profil Ergebnis
DN 80mm 80
DN 120mm 120

Gibt eine bestimmte Anzahl von Zeichen vom rechten Teil (dem Ende) einer Zeichenfolge zurück.

Right(Zeichenfolge, Länge)
Right([EG],3)
EG Ergebnis
Catch_572 572
Catchment_573 573

Verkettung

Zeichenfolgen werden mit dem kaufmännischen & verkettet.

"Ich bin mit " & "diesem Teil verkettet."

Ergebnis:

Ich bin mit diesem Teil verkettet.

Split

Syntax

Teilt die Zeichenfolge anhand eines bestimmten Trennzeichens und gibt ein eindimensionales Datenfeld zurück, das alle Teilzeichenfolgen enthält.

Split(Ausdruck, Trennzeichen)

Weil das Ergebnis von Split nicht ein Einzelwert, sondern ein Datenfeld ist, muss man zusätzlich mit Index die Zeichenfolge an der gewünschten Position ansprechen.1)

Split(Ausdruck, Trennzeichen)(Index)
  • Ausdruck: zu teilende Zeichenfolge
  • Trennzeichen: einzelnes Zeichen, an dem geteilt werden soll
  • Index: gibt an, welcher Teil aus dem Datenfeld zurückgegeben werden soll. Beachten Sie, dass die erste Zeichenfolge den Index 0 trägt, die zweite Zeichenfolge den Index 1 etc.

Beispiel

Die Linke Spalte „Haltung“ enthält Profiltyp, Höhe und Material, jeweils getrennt durch einen Unterstrich. Mit

Split([Haltung], "_")(1)

erhält man das Ergebnis:

Haltung Ergebnis
Kreis_300_STZ 300
Ei_750_Beton 750

Mit

Split([Haltung], "_")(2)

erhält man das Ergebnis

Haltung Ergebnis
Kreis_300_STZ STZ
Ei_750_Beton Beton

Eine Fehlermeldung im Stil
Error running VBA code : user interrupt.
und dann
Index außerhalb des gültigen Bereichs: '[number: 1]'
weist darauf hin, dass in einem Datensatz MeinDatenfeld(1) nicht berechnet werden konnte, z.B. wenn im obigen Beispiel die zweite Zeile nur „DN1000“ enthalten würde. Umgehen Sie das Problem, indem Sie eine Auswahl mit den Datensätzen erstellen, die korrekt zerlegt werden können.

Replace

Syntax

Gibt eine Zeichenfolge zurück, in der eine bestimmte Teilzeichenfolge durch eine andere Zeichenfolge so oft wie angegeben ersetzt wurde.

Replace(Ausdruck, SuchZF, ErsetzenDurch[, Start[, Anzahl]])
  • Ausdruck: zu durchsuchender Text
  • SuchZF: Suchzeichenfolge
  • ErsetzenDurch: Ersatzzeichenfolge
  • Start (optional; immer in Verbindung mit Anzahl): Position in Ausdruck, an der die Suche begonnen soll
  • Anzahl (optional; immer in Verbindung mit Start): Maximale Anzahl der Ersetzungen in Ausdruck

Beispiel 1

Das folgende Beispiel ersetzt Leerzeichen im Feld MUID durch den Unterstrich. In der praktischen Anwendung braucht diese Berechnung einigermaßen lang, weil von der MUID abhängige Tabellen ebenfalls neu berechnet werden, daher mit Vorsicht und Umsicht anwenden!

Replace([MUID] , " " , "_" )

Beispiel 2

Die linke Spalte enthält Höhenangaben als Text. Weil das Dezimaltrennzeichen in den Ländereinstellungen auf Komma gesetzt ist, muss der Punkt durch ein Komma erstetzt werden.

Die rechte Spalte hat das Format Double. Die Berechnung besteht aus zwei Teilen. Mid() holt den Textteil ab der dritten Position, und Replace ersetzt den Punkt durch ein Komma.

Replace(Mid([HoeheTxt],3) , "." , "," )
HoeheTxt Ergebnis
H 855.08 855,08
H 854.43 854,43
H 1011.37 1011,37

Zeichenfolgenformatierung

FormatNumber

Syntax

Gibt einen als Zahl formatierten Ausdruck zurück.

FormatNumber(Ausdruck[,AnzDezimalen [,FolgendeNull [,NegativKlamer [,ZiffGruppe]]]])
  • Ausdruck: zu formatierender Ausdruck
  • AnzDezimalen (optional): Anzahl der Dezimalstellen oder -2…Ländereinstellungen verwenden (Voreinstellung)
  • FolgendeNull (optional): Sollen Nullen nach dem Komma angezeigt werden? -1…Ja, 0…Nein, -2…Ländereinstellungen berücksichtigen (Voreinstellung)
  • NegativKlammer (optional): Sollen negative Werte in Klammer gesetzt werden? -1…Ja, 0…Nein, -2…Ländereinstellungen berücksichtigen (Voreinstellung)
  • ZiffGruppe (optional): Sollen Ziffern gruppiert werden? -1…Ja, 0…Nein, -2…Ländereinstellungen berücksichtigen (Voreinstellung)

Beispiel

Links stehen Durchflussmengen, rechts sieht man das Ergebnis mit zwei fixen Dezimalstellen, wie es beim Labeln des Lageplans angezeigt wird.

FormatNumber([Durchfluss],2,-1)
Durchfluss Ergebnis
41,9 41,90
44,41 44,41
47,225 47,23
47,235 47,24

FormatNumber hat wahrscheinlich nur beim Labeln Sinn. Zum Berechnen von Feldern taugt es nicht, weil in den numerischen Feldern ja nur der Wert gespeichert wird, nicht deren Darstellung.

FIXME Runden testen

1)
Die längere, offizielle Version verwendet im Field Calculator die Option „Advanced“ und lautet:
'Pre-Logic VBA Script Code
Dim MeineZeichenfolge, MeinErgebnisfeld
MeineZeichenfolge = [Haltung]
MeinErgebnisfeld = Split(MeineZeichenfolge, " ")
'Ergebnis =
MeinErgebnisfeld(1)
mikeurban/anleitungen/berechnungen_vbscript.txt · Zuletzt geändert: 2016/05/18 14:31 von julian