Page Title

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

Benutzer-Werkzeuge

Webseiten-Werkzeuge


mikeurban:anleitungen:berechnungen_vbscript

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

mikeurban:anleitungen:berechnungen_vbscript [2016/05/18 14:31] (aktuell)
julian Seitename wurde von mikeurban:berechnungen_vbscript auf mikeurban:anleitungen:berechnungen_vbscript geändert
Zeile 1: Zeile 1:
 +====== 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 [[http://​www.gruenthal.de/​tutorial/​vbscript/​vbs229.htm|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.
 +
 +<code vb>​Round(Ausdruck[,​ AnzDezimalstellen])
 +Round([Laenge],​ 2)
 +</​code>​
 +
 +^  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.
 +
 +<code vb>
 +Left(Zeichenfolge,​ Länge)
 +</​code>​
 +
 +
 +
 +==== Mid ====
 +
 +=== Syntax ===
 +
 +Gibt eine bestimmte Anzahl von Zeichen aus einer Zeichenfolge zurück.
 +
 +<code vb>
 +Mid(Zeichenfolge,​ Start[, Länge])
 +</​code>​
 +
 +  *//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 ===
 +
 +<code vb>
 +Mid([Profil],​4,​Len([Profil])-5)
 +</​code>​
 +
 +^Profil ^Ergebnis ^
 +|DN 80mm |80 |
 +|DN 120mm |120 |
 +
 +
 +
 +
 +==== Right ====
 +
 +Gibt eine bestimmte Anzahl von Zeichen vom rechten Teil (dem Ende) einer Zeichenfolge zurück.
 +
 +<code vb>​Right(Zeichenfolge,​ Länge)
 +Right([EG],​3)</​code>​
 +
 +^EG ^Ergebnis ^
 +|Catch_572 |572 |
 +|Catchment_573 |573 |
 +
 +
 +==== Verkettung ====
 +
 +Zeichenfolgen werden mit dem kaufmännischen **&** verkettet.
 +
 +<code vb>
 +"Ich bin mit " & "​diesem Teil verkettet."​
 +</​code>​
 +
 +**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.
 +
 +<code vb>​Split(Ausdruck,​ Trennzeichen)</​code>​
 +
 +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.((Die längere, offizielle Version verwendet im Field Calculator die Option "​Advanced"​ und lautet:
 +<code vb>
 +'​Pre-Logic VBA Script Code
 +Dim MeineZeichenfolge,​ MeinErgebnisfeld
 +MeineZeichenfolge = [Haltung]
 +MeinErgebnisfeld = Split(MeineZeichenfolge,​ " ")
 +</​code>​
 +
 +<code vb>
 +'​Ergebnis =
 +MeinErgebnisfeld(1)
 +</​code>​))
 +
 +<code vb>​Split(Ausdruck,​ Trennzeichen)(Index)</​code>​
 +
 +  * //​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
 +
 +<code vb>​Split([Haltung],​ "​_"​)(1)</​code>​
 +
 +erhält man das Ergebnis:
 +
 +^Haltung ^Ergebnis ^
 +|Kreis_300_STZ |300 |
 +|Ei_750_Beton |750 |
 +
 +Mit
 +
 +<code vb>​Split([Haltung],​ "​_"​)(2)</​code>​
 +
 +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.
 +
 +<code vb>
 +Replace(Ausdruck,​ SuchZF, ErsetzenDurch[,​ Start[, Anzahl]])
 +</​code>​
 +
 +  * //​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!
 +
 +<code vb>
 +Replace([MUID] , " " , "​_"​ )
 +</​code>​
 +
 +
 +=== 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.
 +
 +<code vb>
 +Replace(Mid([HoeheTxt],​3) , "​."​ , ","​ )
 +</​code>​
 +
 +^  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.
 +
 +<code vb>
 +FormatNumber(Ausdruck[,​AnzDezimalen [,​FolgendeNull [,​NegativKlamer [,​ZiffGruppe]]]])
 +</​code>​
 +
 +  * //​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.
 +
 +<code vb>
 +FormatNumber([Durchfluss],​2,​-1)
 +</​code>​
 +
 +^  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
mikeurban/anleitungen/berechnungen_vbscript.txt · Zuletzt geändert: 2016/05/18 14:31 von julian