vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: ErfinderDesRades
Datum: 15.06.14 20:20

1) Fehlerzeile?

2) taucht das bereits im Editor auf (Designzeit) oder erst im Testlauf (Laufzeit)?

(Rechtschreibfehler urheberrechtlich geschützt)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: TZeRo
Datum: 15.06.14 19:56

Hallo,

diese Funktion soll das 1D-Array, bei einer Teilung splitten und in einem 2D-Array schreiben!


Dim Werte() As Double = {100, 200.5, 300, 800, 1900} ' Millimeterangaben als 
' Beispiel
Dim Teilung AS Double = 200.5
Funktion:
  Function _SplitWerte(ByVal Werte() As Double, ByVal Teilung As Double) As _
    Double(,)
        Dim MaxWert As Integer = Werte.GetUpperBound(0)
        Dim i, j As Integer
 
        For i = 0 To MaxWert
            If Werte(i) < Teilung Then
                ReDim _SplitWerte(j, i)
                _SplitWerte(j, i) = Werte(i)
            Else
                j = j + 1
                Teilung = j * Teilung
                ReDim _SplitWerte(j, i)
                _SplitWerte(j, i) = Werte(i)
            End If
            Me.listRaster.Items.Add(_SplitWerte(j, i))
        Next i
    End Function
Nun taucht halt immer folgende Fehlermeldung auf!

Der Wert vom Typ "Integer" kann nicht in "1-dimensionales Array von Double" konvertiert werden.

Leider kann ich den Fehler nicht nachvollziehen! Ich hoffe ihr könnt mir helfen.


Gruß

TzeRo
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: TZeRo
Datum: 15.06.14 20:32

Der Fehler taucht im Editor auf!!!! Die Variabel j wird Rot unterstrichen!

    Function _SplitWerte(ByVal Werte() As Double, ByVal Teilung As Double) As _
      Double(,)
        Dim MaxWert As Integer = Werte.GetUpperBound(0)
        ' Dim _SplitWerte(,) As Double
        Dim i, j As Integer
        For i = 0 To MaxWert
            If Werte(i) < Teilung Then
                ReDim _SplitWerte(j, i)
                _SplitWerte(j, i) = Werte(i) ' <----- j hier in rot unterstrichen
            Else
                j = j + 1
                Teilung = j * Teilung
                ReDim _SplitWerte(j, i)
                _SplitWerte(j, i) = Werte(i) ' <----- j hier in rot unterstrichen
            End If
            Me.listRaster.Items.Add(_SplitWerte(j, i))' <----- j hier in rot 
            ' unterstrichen
        Next i
    End Function
Lasse ich dieses automatisch vom Editor korrigieren wird dieses hinzugefügt!

    Private Property _SplitWerte(j As Integer, i As Integer) As Double
        Get
            Return __SplitWerte
        End Get
        Set(value As Double)
            __SplitWerte = value
        End Set
    End Property
Und erhalte eine weitere Fehlermeldung in der Laufzeit bzw. beim starten!

Eigenschaftenzugriff muss der Eigenschaft zugewiesen werden oder deren Wert verwenden.




Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: ErfinderDesRades
Datum: 15.06.14 20:43

könnte eine Verwechslung sein, weil du den Funktionsnamen als Rückgabe-Variable verwendest.
Die Zuweisung eines Elements missversteht der Compiler wohl als rekursiven Aufruf der Methode.

Also deklarier besser eine Extra-Variable, und returne die ganz klassisch mit der Return-Anweisung.

(Rechtschreibfehler urheberrechtlich geschützt)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: Kuno60
Datum: 15.06.14 21:49

Hallo,

dieser Code kann so nicht funktionieren.
ReDim innerhalb der Schleife löscht alle Werte.
Ständiges Hochzählen von j.
Und was soll diese Zeile "Teilung = j * Teilung" bewirken?

Was willst Du eigentlich genau erreichen?
Alle Werte die vor oder nach 200.5 stehen?
Alle Werte die kleiner oder größer als 200.5 sind?
Oder was?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: Manfred X
Datum: 15.06.14 22:07

Hallo!

Ich weiß nicht, was genau dieser Code bewirken soll,
aber vermutlich geht es irgendwie so oder ähnlich .....

   Function Splitwerte(ByVal werte() As Double, _
                       ByVal Teilung As Double, _
                       ByRef splits As List(Of Double)) As Double(,)
 
        splits = New List(Of Double)
 
        Dim iTeilung As Double = Teilung
        Dim j As Integer = 0
 
        'Erforderliche Arraydimension ermitteln
        For i As Integer = 0 To werte.GetUpperBound(0)
            If werte(i) >= iTeilung Then
                j = j + 1
                iTeilung = j * iTeilung
            End If
        Next i
 
        'Array für Rückgabe einrichten
        Dim ret(j, werte.GetUpperBound(0)) As Double
 
        j = 0 'reinit
 
        For i As Integer = 0 To werte.GetUpperBound(0)
            If werte(i) < Teilung Then
                ret(j, i) = werte(i)
            Else
                j = j + 1
                Teilung = j * Teilung
                ret(j, i) = werte(i)
            End If
            splits.Add(ret(j, i))
        Next i
 
        Return ret
    End Function
Anwendung:
  Dim Werte() As Double = {100, 200.5, 300, 800, 1900} ' Millimeterangaben als 
 
  Dim Teilung As Double = 200.5
 
  Dim splits As List(Of Double) = Nothing
 
  'Operation durchführen - Ergebnis im Array "sw" und im Ref-Param. "splits"
  Dim sw As Double(,) = Splitwerte(Werte, Teilung, splits)
 
  'Anzeige der gelisteten Splitwerte in einer Listbox (Datenbindung)
  Dim splitlist As New ListBox With {.Parent = Me}
  splitlist.DataSource = splits


Beitrag wurde zuletzt am 15.06.14 um 22:20:18 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: sv00010
Datum: 16.06.14 19:06

Zitat:

Nun taucht halt immer folgende Fehlermeldung auf!

Der Wert vom Typ "Integer" kann nicht in "1-dimensionales Array von Double" konvertiert werden.

Leider kann ich den Fehler nicht nachvollziehen! Ich hoffe ihr könnt mir helfen.


Gruß

TzeRo
Das kommt vom rekursiven Aufruf der Function.
Insgesamt kann man sehen, dass du versuchst mit der Visual Basic 6-Vorgehensweise,
einen Function in .net zu schreiben. Das kann so aber nicht funktionieren.
0

Beitrag wurde zuletzt am 16.06.14 um 19:07:52 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: Manfred X
Datum: 16.06.14 20:22

Auch in VB6 wäre ein Zugriff auf die Funktionsrückgabe, wie TZeRo sie
macht (einzelnes Array-Element), nicht möglich.
Sowohl in VB6 als auch in VB.Net kann aber ein intern (VB6: dynamisch, Redim)
deklariertes Array "als Ganzes" zur Rückgabe auf den Funktionsnamen
zugewiesen werden. (Bei VB.Net muß dabei die im Rückgabe-Parameter vorgegebene
Anzahl der Dimensionen stimmen).

Die hier vermutlich benötigte Anweisung "Redim Preserve" kann sowohl in VB6
als auch in VB.Net nur die letzte Array-Dimension ändern.
Die von TZeRo vorgenommene Anpassung der Arraygrenze ist deshalb so nicht möglich.

Beitrag wurde zuletzt am 16.06.14 um 20:26:37 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: TZeRo
Datum: 16.06.14 20:59

Hallo Kuno,

ist ReDim nicht eine Neudimensionierung des Array, d.h. die Werte bleiben unberührt. Ich hab da noch das Schlüsselwort Preserve vergesseen. Und in Schleife durch aus sinnvoll, wenn man die Dimensionsgröße nicht kennt.
Den Code habe ich auch in einer Sub vorher ausprobiert (mit Preserve) und es lief. Da ich den Teil häufiger benötige, wollte ich eine Funktion bauen! Vielleicht ist es nicht gut gelöst!!

Ich möchte mit den Code erreichen, daß ein 1D Array in einen 2D Array umgewandelt wird! Für die Praxis bedeutet dieses ein Art Repositionierung einer X-Achse in mm!


Das 2D-Array müsste zum Beispiel so aussehen Teilung 400:
(1D Array = 200,300,400,400.5,500,801,900,1200,1640)

1 200,300,400 <= Teilung ist 400
2 400.5,500 <= Teilung ist 800
3 801,900,1200 <= Teilung ist 1200
4 <= Teilung ist 1600
5 1640 <= Teilung ist 2000

Ich hoffe ich könnte es etwas entwirren.

TZeRo


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: TZeRo
Datum: 16.06.14 21:11

Selbst mit Preserve hat es nicht funktioniert....allerdings funktioniert es in einer Sub problemlos! D.h. ich muss die Dimensionierung ermitteln wie in Manfreds Code der Fall ist!


@Manfred: Danke für den Lösungsansatz!!!!


TZeRo
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: Kuno60
Datum: 16.06.14 21:29

Hallo TZeRo,

danke für die Entwirrung. Jetzt ist die Sache klar: also eine Mehrfachteilung.
Gut ich probier mal was.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: Kuno60
Datum: 16.06.14 22:21

Hallo TZeRo,

hier ein kleines Beispiel, wie man es auch lösen kann (ab FW 3.5):
  Function SplitWerte(Werte() As Double, Teilung As Double) As Double()()
    Dim swl As New List(Of Double())
    Dim a() As Double, t = Teilung, z = 1, i = 0
    Do
      t = z * Teilung : z += 1
      a = Werte.Skip(i).TakeWhile(Function(x) x <= t).ToArray
      swl.Add(a)
      i += a.Length
    Loop Until t > Werte.Last
    Return swl.ToArray
  End Function
und so wird es aufgerufen:
    Dim a = {200, 300, 400, 400.5, 500, 801, 900, 1200, 1640}
    Dim t = 400
    Console.WriteLine("Werte: {0}", String.Join(", ", a))
    Console.WriteLine("Teilung: {0}", t)
    Console.WriteLine()
    Dim res = SplitWerte(a, t)
    For Each w In res
      Console.WriteLine("{0} Werte: {1}", w.Length, String.Join(" ", w))
    Next
und das ist die Ausgabe:
Werte: 200, 300, 400, 400,5, 500, 801, 900, 1200, 1640
Teilung: 400
 
3 Werte: 200 300 400
2 Werte: 400,5 500
3 Werte: 801 900 1200
0 Werte:
1 Werte: 1640
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: TZeRo
Datum: 16.06.14 22:47

Das mit den Löschen konnte nachvollziehen! In der Tat werden die Werte durch ReDim gelöscht!

Kuno60 schrieb:
Zitat:

Hallo TZeRo,

hier ein kleines Beispiel, wie man es auch lösen kann (ab FW
3.5):
  Function SplitWerte(Werte() As Double, Teilung As
Double) As Double()()
    Dim swl As New List(Of Double())
    Dim a() As Double, t = Teilung, z = 1, i = 0
    Do
      t = z * Teilung : z += 1
      a = Werte.Skip(i).TakeWhile(Function(x) x <=
t).ToArray
      swl.Add(a)
      i += a.Length
    Loop Until t > Werte.Last
    Return swl.ToArray
  End Function
und so wird es aufgerufen:
    Dim a = {200, 300, 400, 400.5, 500, 801, 900, 1200,
1640}
    Dim t = 400
    Console.WriteLine("Werte: {0}",
String.Join(", ", a))
    Console.WriteLine("Teilung: {0}", t)
    Console.WriteLine()
    Dim res = SplitWerte(a, t)
    For Each w In res
      Console.WriteLine("{0} Werte: {1}", w.Length,
String.Join(" ", w))
    Next
und das ist die Ausgabe:
Werte: 200, 300, 400, 400,5, 500, 801, 900, 1200, 1640
Teilung: 400
 
3 Werte: 200 300 400
2 Werte: 400,5 500
3 Werte: 801 900 1200
0 Werte:
1 Werte: 1640


Danke für den Code! So nun muss ich es nur noch es nachvollziehen bzw. verstehen! Das bekomme ich jetzt hin!

Danke......
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: TZeRo
Datum: 16.06.14 22:53

Danke euch allen für eure Unterstützung ..nun muss ich aber meinen Kopf selber anstrengen! Sonst lernt man ja VB.Net nie!!!

Besonderes Danke an Kuno60 und Manfred X...für die unterschiedlichen Lösungsansätze!!!

TZeRo
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Funktionen Rückgabewert als mehrdimensionales Array!!! 
Autor: TZeRo
Datum: 16.06.14 22:56

Du hattest Recht mit der Verwechslung, aber ein weiteres Problem war auch das Redim....siehe Beiträge von Manfred x und Kuno60

Danke!!!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel