Die folgende Funktion erlaubt das 'Rechnen' mit Feldern und Konstanten. Als Parameter kann man entweder zwei Felder, deren stellungsbezogene Elemente mit einer der vier Grundrechenarten verknüpft werden sollen, oder ein Feld, dss mit einer Konstanten 'verrechnet' werden soll, angeben. Dabei heißt 'stellungsbezogen', dass das Element mit Index x des ersten Feldes mit dem Element mit Index x des zweiten Feldes verknüpft wird (das setzt voraus, dass die Felder möglichst gleich dimensioniert sein müssen). Wenn man arr2 nicht angibt, erwartet die Funktion, dass mit einer Konstanten gerechnet werden soll. Es können auch Felder angegeben werden, die aus gemischten Typen von Elementen bestehen. Es werden nur Elemente für die Berechnung verwendet die vom Typ so zu sagen 'numerisch' sind. Im Feld der Ausnahmetypen sind diejenigen Datentypen angegeben, die nicht 'verrechnet' werden können. Wenn das der Fall ist, sind unten im Funktionscode Möglichkeiten angegeben, wie man verfahren, um das Ergebnisfeld zu füllen. Die Funktion: ''' <summary> ''' Elemente zweier Arrays mit arithmetischer Operation verknüpfen ''' </summary> ''' <param name="arithArt">die Operation als String ("+", "-", "*", "/")</param> ''' <param name="arr1">das erste Array</param> ''' <param name="arr2">das zweite Array</param> ''' <param name="idx1">Anfangsindex</param> ''' <param name="idx2">Endeindex</param> ''' <param name="constante">eine Konstante</param> ''' <returns>das Ergebnis-Array</returns> ''' <remarks> ''' Das zweite Array muss bei Subtraktion die Subtrahenden-, ''' bei Division die Divisoren-Elemente enthalten. ''' Wird ein zweites Array nicht angegeben, wird erwartet, ''' dass mit einer Konstanten gerechnet wird. ''' Es werden alle Elemente anhand der Ausnahmetypen überprüft, ob sie numerische Elemente sind, ''' wenn nicht, wird als Ergebniselement 0 gespeichert. ''' </remarks> Public Function arithArrays(ByVal arithArt As String, _ ByVal arr1 As Array, Optional ByVal arr2 As Array = Nothing, _ Optional ByVal idx1 As Short = 0, Optional ByVal idx2 As Short = 0, _ Optional ByVal constante As Object = 1) As Array ' Ausnahmetypen Dim types() As Type = _ {GetType(Boolean), GetType(Byte), GetType(Char), _ GetType(DateTime), GetType(Object), GetType(String)} Dim ty1, ty2 As Type, value As Object ' Ausgabe-Array ' das erste Feld bestimmt die Dimension des Ausgabefelds Dim tmpArr(arr1.Length - 1) As Object Dim lastIdx As Short = idx2 If idx2 = 0 Then lastIdx = arr1.Length - 1 For i As Short = idx1 To lastIdx ' Rechnen mit zwei Feldern If Not IsNothing(arr2) Then If IsDBNull(arr1(i)) OrElse IsDBNull(arr2(i)) Then Continue For ty1 = arr1(i).GetType : ty2 = arr2(i).GetType If types.IndexOf(types, ty1) >= 0 OrElse types.IndexOf(types, ty2) >= 0 Then ' Arrayelement war nicht numerisch (könnte auch DBNull oder Nothing o.ä. gesetzt werden) tmpArr(i) = 0 Continue For End If value = arr2(i) ' Rechnen mit Konstante Else If types.IndexOf(types, ty1) >= 0 Then ' Arrayelement war nicht numerisch, dann Ergebniselement = Originalelement tmpArr(i) = arr1(i) Continue For End If value = constante End If Select Case arithArt Case "+" ' Addition tmpArr(i) = arr1(i) + value Case "-" ' Subtraktion tmpArr(i) = arr1(i) - value Case "*" ' Multiplikation tmpArr(i) = arr1(i) * value Case "/" ' Division If value = 0 Then ' wenn Divisorelement oder constante =0, dann Ergebniselement =0 ' (könnte auch =DBNull oder =Nothing oder =Originalelement von arr1 o.ä. gesetzt werden) tmpArr(i) = 0 Else tmpArr(i) = arr1(i) / value End If End Select Next Return tmpArr End Function Aufrufbeispiel zwei Felder: Dim dr1, dr2 As DataRow Dim diff As Array = arithArrays("-", dr2.ItemArray, dr1.ItemArray, 1) Aufrufbeispiel rechnen mit Konstanter: Dim drj() As Object drj = DatagridView1.Rows(0).DataBoundItem.Row.ItemArray drj = arithArrays("/", drj, , , , 1000) Dieser Tipp wurde bereits 8.461 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
Neu! sevCommand 4.0 Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |