Public deklariertes Struktur-Array redimensionieren

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

Moderator: Moderatoren

Bergkaffee
*
Beiträge: 14
Registriert: Di, 15.03.2011 13:11

Public deklariertes Struktur-Array redimensionieren

Beitrag von Bergkaffee »

Hallo zusammen.

Ich möchte ein Array öffentlich deklarieren, damit ich dessen Daten in mehreren Makros eines Moduls verwenden kann.
Das Array ist allerdings auch als Struktur deklariert. Nun finde ich keine Möglichkeit dieses Array in einem Makro zu redimensionieren.

Code: Alles auswählen

Type PunkteType
	row  as Long
	Pnr  as Variant
	dRW  as Double
	dHW	 as Double
	cluster()
End Type

Public Punkte() as PunkteType

sub PZ1berechnen
[...]
PunkteAnz = lst.getItemCount() + 4
redim Punkte(PunkteAnz) as PunkteType
[...]
end sub
Kann mir jemand weiterhelfen wie ich das umsetzen kann bzw. wo mein Fehler liegt.
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Public deklariertes Struktur-Array redimensionieren

Beitrag von balu »

Hallo Bergkaffee,

was hälst Du denn davon wenn Du die Public deklaration ganz am anfang des Moduls und zwar in den ersten Zeilen oberhalb der ersten Sub, anstatt mittendrin ausführst?

Ich weiß jetzt aber nicht auf die schnelle ob das dein Problem löst, da ungetestet.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Public deklariertes Struktur-Array redimensionieren

Beitrag von DPunch »

Aloha

Bei User Defined Types benötigt es dazu das Stichwort "Preserve", also

Code: Alles auswählen

redim Preserve Punkte(PunkteAnz) as PunkteType
Bergkaffee
*
Beiträge: 14
Registriert: Di, 15.03.2011 13:11

Re: Public deklariertes Struktur-Array redimensionieren

Beitrag von Bergkaffee »

Vielen Dank, jetzt gibt es kein Problem mehr. Die Public-deklaration geschieht bereits am Anfang. Mit dem Zusatz Preserve funktioniert es jetzt. Was ich jetzt nicht verstehe ist, dass ich Preserve bei Arrays immer dazu nutze (und ich habe gedacht, dies ist auch der Sinn) damit die Daten im Array erhalten bleiben. Warum bewirkt es dann bei Typen, dass das Array geleert wird?
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Public deklariertes Struktur-Array redimensionieren

Beitrag von DPunch »

Aloha
Bergkaffee hat geschrieben:Was ich jetzt nicht verstehe ist, dass ich Preserve bei Arrays immer dazu nutze (und ich habe gedacht, dies ist auch der Sinn) damit die Daten im Array erhalten bleiben.
Das ist normalerweise der Sinn, ja.
Bergkaffee hat geschrieben:Warum bewirkt es dann bei Typen, dass das Array geleert wird?
Bei mir wird das Array nicht geleert, sondern (wie gewünscht?) nur neu dimensioniert, vorhandene Einträge bleiben erhalten.
Bergkaffee
*
Beiträge: 14
Registriert: Di, 15.03.2011 13:11

Re: Public deklariertes Struktur-Array redimensionieren

Beitrag von Bergkaffee »

Ah, sorry, da ist mir ein Fehler unterlaufen. Daten bleiben erhalten.
Wie würde ich erreichen, dass das Array geleert wird?
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Public deklariertes Struktur-Array redimensionieren

Beitrag von DPunch »

Aloha
Bergkaffee hat geschrieben:Wie würde ich erreichen, dass das Array geleert wird?
Meines Wissens nach nur durch zunutze machen der ByReference Aufrufe mit einer extra Prozedur ala

Code: Alles auswählen

Sub RedimMyTypeArray(myArray, newDimension)
	Dim Dummy(newDimension) as New PunkteType
	myArray = Dummy
End Sub
und Verwendung ala

Code: Alles auswählen

sub PZ1berechnen
[...]
PunkteAnz = lst.getItemCount() + 4
RedimMyTypeArray(Punkte,PunkteAnz)
[...]
end sub
Ich habe allerdings selber nur ganz am Anfang, als ich das erste Mal über die User Defined Types gestolpert bin, ein wenig damit herumgespielt, in der praktischen Arbeit habe ich die nie verwendet. Sehr wahrscheinlich also, dass es da auch andere / bessere Wege für gibt.
Antworten