zweidimensionales Makro mit Werten füllen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

erikafuchs
******
Beiträge: 511
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

zweidimensionales Makro mit Werten füllen

Beitrag von erikafuchs » Do, 05.09.2019 12:05

Hallo Leute,
was ist hier falsch:

Code: Alles auswählen

	dim noshow(3,1) as integer    
	noshow()=array(array(1,2,3,4),array(5,6,7,8))
	print noshow(0,0)
Es kommt die Meldung: "Objektvariable nicht belegt"
Grüße
Pit

Stephan
********
Beiträge: 11239
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: zweidimensionales Makro mit Werten füllen

Beitrag von Stephan » Do, 05.09.2019 13:03

falsch ist:
dim noshow(3,1) as integer
-->Du kannst nicht ein Array als Integer definieren, wenn es seinerseits Arrays enthalten soll

deshalb, z.B.:

Code: Alles auswählen

dim noshow(3,1) as Variant

noshow()=array(array(1,2,3,4),array(5,6,7,8))
-->Du kannst nicht eine Variable in dieser Weise mit Inhalt belegen wenn Du sie bereits vorher anders definiert hast

deshalb z.B.:

Code: Alles auswählen

noshow(0,0)=array(1,2,3,4)
print noshow(0,0)
-->Du kannst nicht ein Array anzeigen lassen, sondern immer nur Elemente eines Array

deshalb, z.B.:

Code: Alles auswählen

x = noshow(0,0)
Print x(0)
insgesamt also z.B.:

Code: Alles auswählen

dim noshow(3,1) as Variant    
noshow(0,0)=array(1,2,3,4) 'd.h. nur eine Zelle des Arrays ist hier
                           'belegt, 7 Zellen sind noch frei
x = noshow(0,0) 'x enthält dadurch das Array aus noshow(0,0)
Print x(0) 'angezeigt wird nur der erste Wert (Index 0) des Arrays x 

oder auch (in anderer Interpretation dessen was Du mutmaßlich erreichen wolltest):

Code: Alles auswählen

Dim noshow() As Variant 'ohne Dimension 
noshow()=array(array(1,2,3,4),array(5,6,7,8)) 'klappt nun  
print noshow(0,0) (0) 'verkürze Schreibweise (statt x = noshow(0,0) ... Print x(0)) 
Gruß
Stephan

erikafuchs
******
Beiträge: 511
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: zweidimensionales Makro mit Werten füllen

Beitrag von erikafuchs » Do, 05.09.2019 16:35

-->Du kannst nicht ein Array als Integer definieren, wenn es seinerseits Arrays enthalten soll
.. das war die Sache, dass ein zweidimensionaler Array eigentlich verschachtelte Arrays sind? Wenn ich diese nur mit Ganzzahlen füllen will kann/brauche ich das also nicht festlegen?

noshow()=array(array(1,2,3,4),array(5,6,7,8))
-->Du kannst nicht eine Variable in dieser Weise mit Inhalt belegen wenn Du sie bereits vorher anders definiert hast
Ich dachte, ich hätte das Array mit 4 Zeilen und 2 Spalten definiert (oder war es umgekehrt?) dann müssten doch 2 mal 4 Zahlen reinpassen?

-->Du kannst nicht ein Array anzeigen lassen, sondern immer nur Elemente eines Array
Ich dachte, ich hätte das schonmal so genutzt, dass z.B. (2,1) das dritte Element in der zweiten Zeile ausgibt. Aber wie Du es beschreibst, habe ich es zum Laufen bekommen - vielen Dank.

Stephan
********
Beiträge: 11239
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: zweidimensionales Makro mit Werten füllen

Beitrag von Stephan » Do, 05.09.2019 18:23

.. das war die Sache, dass ein zweidimensionaler Array eigentlich verschachtelte Arrays sind?
Zweidimensionale Arrays sind nicht deshalb verschachtelt weil sie zweidimensional sind, sondern dann wenn sie ihrerseits Arrays enthalten.
Wenn ich diese nur mit Ganzzahlen füllen will kann/brauche ich das also nicht festlegen?
Du brauchst nicht, aber Du kannst und solltest, aber der Datentyp muss stimmen.

Array(...) selbst liefert nach Pitonyak (https://www.uni-due.de/~abi070/count.ph ... eutsch.pdf dort in Kapitel "3.5.2. Unerwartetes Verhalten von Arrays") ein Array des Typs Variant, hier dürfte also die Detailursache liegen warum sich das nicht mit der Integer-Deklaration verträgt.
dann müssten doch 2 mal 4 Zahlen reinpassen?
Aber nicht ersatzweise zwei Arrays, zumindest wüsste ich nicht wie, ohne die Arrays bei der Zuweisung aufzulösen.
Wenn es nur um die Bequemlichkeit bei der Programmierung geht, müsstest Du notfalls eine Function schreiben, die die übergebenen Arrays so zuweist wie Du es Dir wünscht, z.B.:

Code: Alles auswählen

Sub Test
        dim noshow(3,1) as integer    
	noshow()=myarray(array(1,2,3,4),array(5,6,7,8))
	print noshow(0,0)
End Sub

Function myarray(x, y)
	Dim z(3,1)
	For i = 0 to 3
		z(i,0) = x(i)
		z(i,1) = y(i) 
	Next i
	myarray = z()	
End Function
Gruß
Stephan

Antworten