Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: skywook am 08.11.18 - 13:22:01

Titel: Übergabe Array an Function
Beitrag von: skywook am 08.11.18 - 13:22:01
Hallo,

ich möchte ein zweidimensionalen Array einer Function übergeben. Funktioniert das nicht? Bei einem eindimensionalen Array klappt es.

Die Function ist als Variant deklariert:

Function Ablauf(xx as string) as variant

Dim ar as variant
redim ar(10,3)
........

und die Übergabe sieht so aus
ablauf = a

Titel: Re: Übergabe Array an Function
Beitrag von: Gutierrez am 08.11.18 - 13:29:18
Moin,

Code
ablauf = a

das wäre ja falsch. Wenn, dann

Code
ablauf = ar

Hast du evtl. Tippfehler? Option Declare benutzt?

Beste Grüße
Gutierrez
Titel: Re: Übergabe Array an Function
Beitrag von: skywook am 08.11.18 - 13:41:36
Sorry, meinte natürlich

ablauf = ar
Titel: Re: Übergabe Array an Function
Beitrag von: Gutierrez am 08.11.18 - 14:51:26
Moin,

aber das funktioniert doch so, wie du es beschreibst?!

Code
Option Public
Option Declare

Sub Initialize
	
	
	Dim r As Variant
	Dim i As Integer
	Dim j As Integer
	
	r = Func_a
	For i = 0 To Ubound(r)
		For j = 0 To Ubound(r, i+1)
			Print r(i, j)
		Next
	Next
	
End Sub

Function Func_a() As Variant
	
	
	Redim v(1, 1)
	
	v(0, 0) = "0/0"
	v(0, 1) = "0/1"
	v(1, 0) = "1/0"
	v(1, 1) = "1/1"
	
	
	Func_a = v
	
End Function

Beste Grüße
Gutierrez
Titel: Re: Übergabe Array an Function
Beitrag von: skywook am 08.11.18 - 19:55:06
In der zweiten Dimension ist ein Array enthalten.
Bei der Übergabe zur Function kommt die Fehlermeldung: Type mismatch

Function Func_a() As Variant
   
   Dim a As Variant
   Redim a(3)
   a(0) = "1"
   a(1) = "11"
   a(2) = "12"
   a(3) = "13"
   
   Redim v(1, 1)
   
   v(0, 0) = "0/0"
   v(0, 1) = a
   v(1, 0) = "1/0"
   v(1, 1) = a
   
   ###### Hier kommt der Fehler #########
   Func_a = v
   
End Function



Titel: Re: Übergabe Array an Function
Beitrag von: Gutierrez am 08.11.18 - 21:07:14
Moin,

ich verstehe. Dann würde ich das alles in einem Objekt kapseln, wenn es so nicht funktioniert.


Code
Option Public
Option Declare

Class SimpleClass	

	Public v As Variant	

End Class

Sub Initialize
	
	Dim r As SimpleClass
	Dim i As Integer
	Dim j As Integer
	Dim k As Integer
	Dim t As Variant
	
	Set r = Func_a
	For i = 0 To Ubound(r.v)
		For j = 0 To Ubound(r.v, i+1)
			If Isarray(r.v(i, j)) Then				
				t = r.v(i, j)
				For k = 0 To Ubound(t)
					Print t(k)
				Next
			Else
				Print r.v(i, j)
			End If			
		Next
	Next
	
End Sub

Function Func_a() As SimpleClass
	
	Dim cObj As New SimpleClass
	
	Dim a As Variant
	Redim a(3)
	a(0) = "1"
	a(1) = "11"
	a(2) = "12"
	a(3) = "13"
	
	Redim cObj.v(1, 1)
	
	cObj.v(0, 0) = "0/0"
	cObj.v(0, 1) = a
	cObj.v(1, 0) = "1/0"
	cObj.v(1, 1) = a
	
	
	Set Func_a = cObj
	
	
End Function


Beste Grüße,
Gutierrez
Titel: Re: Übergabe Array an Function
Beitrag von: skywook am 12.11.18 - 13:24:45
Super, funktioniert.

Übergebe jetzt ein Objekt. Aber jetzt habe ich noch ein Problem.

Wie funktioniert dann der arrayGetIndex wenn ich in dem Array z.B. nach "1/0" suchen möchte?

if isnull( arrayGetIndex( r.v, "1/0) ) then

funktioniert ja nicht.
Titel: Re: Übergabe Array an Function
Beitrag von: jBubbleBoy am 12.11.18 - 14:29:49
deshalb?
https://www-01.ibm.com/support/docview.wss?uid=swg21456399

schreib dir eine Funktion die das behandelt, am besten gleich in der "SimpleClass"
Titel: Re: Übergabe Array an Function
Beitrag von: skywook am 12.11.18 - 15:04:18
Perfekt. Vielen Dank.

Noch eine Frage, die Suche hat nichts gebracht ..

Wenn ich den den Array (aus dem Objekt) wieder in einem "normalen" Array umwandeln möchte, muss ich den durchlaufen und zuordnen oder gibts hierfür einen einfachen convert-Befehl?

So auf die Art:

dim nArray as Variant
nArray = xxxx(r.v)
Titel: Re: Übergabe Array an Function
Beitrag von: jBubbleBoy am 12.11.18 - 15:35:53
einer Variable vom Typ Variant kannst du es zuweisen, bei einer Variable vom Typ Array geht das nicht