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.486 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. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Neu! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. |
||||||||||||||||
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. |