Seite 1 von 2
Variable abfragen
Verfasst: 21.10.2013 00:19
von Skiller
Hi Folks,
Code: Alles auswählen
Procedure P_action(index)
If Not MyArray(0) ;..????.. Wie kann ich hier abfragen, ob MyArray überhaupt existiert??
Global Dim MyArray(0)
EndIf
ReDim MyArray(index)
;usw....
EndProcedure
P_action(1)
P_action(2)
P_action(3)
DANKE!!!

Re: Variable abfragen
Verfasst: 21.10.2013 00:46
von STARGÅTE
Nun ja, das Schlüsselwort
Global wird so oder so schon zu Compilerzeiten gelesen und ausgeführt und macht das Array
MyArray ab der Zeile des Aufrufs sowieso global.
Diese Definition gehört also außerhalb der Prozedure.
Unabhängig davon kannst du
Code: Alles auswählen
CompilerIf Defined(MyArray, #PB_Array) = #False
Global Dim MyArray(0)
CompilerEndIf
nutzen, um Doppeldefinitionen zu vermeiden.
Re: Variable abfragen
Verfasst: 21.10.2013 02:09
von KeyKon
Zur Laufzeit hilft dir da auch ArraySize(MyArray()) weiter. Das gibt -1 zurück wenn es noch nicht exisitiert bzw. beim Anlegen einen Fehler gab (z.B. zu groß)
Desweiteren gibt es natürlich die aktuelle Größe des Arrays zurück, was du vll auch gebrauchen kannst.
LG KeyKon
Re: Variable abfragen
Verfasst: 21.10.2013 10:46
von Skiller

danke Leute.
Re: Variable abfragen
Verfasst: 21.10.2013 11:28
von Skiller
Hallo nochmal,
sah erst sehr vielversprechend aus, funzt allerdings beides nicht.
Was ist noch möglich ?
Code: Alles auswählen
Procedure P_action(index_)
; Versuch 1
If Defined(MyArray1, #PB_Array) = #False
Global Dim MyArray1(0)
Debug index_
EndIf
; Versuch 2
CompilerIf Defined(MyArray2, #PB_Array) = #False
Global Dim MyArray2(0)
Debug index_
CompilerEndIf
;Versuch 3 FEHLER!!!!
If ArraySize(MyArray3()) = -1
Global Dim MyArray3(0)
Debug index_
EndIf
EndProcedure
P_action(1)
P_action(2)
P_action(3)
P_action(4)
Re: Variable abfragen
Verfasst: 21.10.2013 11:40
von Kiffi
Skiller hat geschrieben:Was ist noch möglich ?
wieso nicht so?
Code: Alles auswählen
Global Dim MyArray1(0)
Procedure P_action(index_)
[...]
EndProcedure
P_action(1)
P_action(2)
P_action(3)
P_action(4)
Grüße ... Kiffi
Re: Variable abfragen
Verfasst: 21.10.2013 12:27
von STARGÅTE
@Skiller:
Hab ich mir fast gedacht, was du da machen willst, aber das geht nun mal nicht, weil dein Global immer ausgeführt wird, egal ob die Prozedur aufgerufen wird oder nicht!
Die Frage die sich mir nun auch stellt ist, warum nimmst du nicht die normale Variante, wie Kiffi vorschlägt?
Und wenn es dir um Arrayvergrößerung geht:
Code: Alles auswählen
Global Dim MyArray1(0)
Procedure P_action(index_)
If ArraySize(MyArray1()) < index_
ReDim MyArray1(index_)
Debug index_
EndIf
EndProcedure
P_action(17)
P_action(11)
P_action(5)
P_action(30)
Re: Variable abfragen
Verfasst: 21.10.2013 15:09
von Skiller
Hallo Kiffi,
Deshalb...
Code: Alles auswählen
Procedure P_Create_MyBox(index)
CompilerIf Defined(S_Box.S_Box, #PB_Array) = #False
Global Dim S_Box.S_Box(0)
Debug index_
CompilerEndIf
Redim S_Box.S_Box(index)
; ..usw
Endprocedure
Procedure P_Create_MyBall(index)
CompilerIf Defined(S_Ball.S_Ball, #PB_Array) = #False
Global Dim S_Ball.S_Ball(0)
Debug index_
CompilerEndIf
Redim S_Ball.S_Ball(index)
; ..usw
Endprocedure
P_Create_MyBox(0)
P_Create_MyBox(1)
P_Create_MyBox(2)
P_Create_MyBall(0)
P_Create_MyBall(1)
P_Create_MyBall(2)
Ich will ja nicht jedes Mal Meshes extra global deklaireren . Es wäre also so viel komfortabler.
Ok Stargate, ist das wirklich Dein letztes Wort??!!!

Gruß Skiller
Re: Variable abfragen
Verfasst: 21.10.2013 15:51
von NicTheQuick
Was stört dich an 'Static'?
Code: Alles auswählen
Structure S_Box
EndStructure
Structure S_Ball
EndStructure
Procedure P_Create_MyBox(index)
Static Dim S_Box.S_Box(0)
Debug index
ReDim S_Box.S_Box(index)
; ..usw
EndProcedure
Procedure P_Create_MyBall(index)
Static Dim S_Ball.S_Ball(0)
Debug index
ReDim S_Ball.S_Ball(index)
; ..usw
EndProcedure
P_Create_MyBox(0)
P_Create_MyBox(1)
P_Create_MyBox(2)
P_Create_MyBall(0)
P_Create_MyBall(1)
P_Create_MyBall(2)
Und warum hinter dem 'index' ein Unterstrich war, hab ich auch nicht verstanden.
Re: Variable abfragen
Verfasst: 21.10.2013 18:45
von Skiller
Hi, Nick
ich brauche aber global, weil ich von extern aufrufen muss. Danke trotzdem. Ich hab noch ´nen bischen gegrübelt und das hier rausbekommen. Vielleicht könnt Ihr es ja noch ein weinig feinschleifen bzw. mögliche Fehler finden. Danke !!!
Code: Alles auswählen
EnableExplicit
Global Dim StructAbfrage(0)
Procedure P_Struct()
Structure S_Box
TestBox.i
EndStructure
Structure S_Ball
TestBall.i
EndStructure
EndProcedure
Procedure P_Create_MyBox(index)
Protected MeshID = 1
ReDim StructAbfrage(MeshID)
If Defined(P_Struct, #PB_Procedure) <> StructAbfrage(MeshID)
StructAbfrage(MeshID) = #True
Global Dim S_Box.S_Box(0)
Debug "#######"
Debug index
Debug "#######"
Debug " "
EndIf
ReDim S_Box.S_Box(index)
S_Box.S_Box(index)\TestBox = 88*index
EndProcedure
Procedure P_Create_MyBall(index)
Protected MeshID = 2
ReDim StructAbfrage(MeshID)
If Defined(P_Struct, #PB_Procedure) <> StructAbfrage(MeshID)
StructAbfrage(MeshID) = #True
Global Dim S_Ball.S_Ball(0)
Debug "#######"
Debug index
Debug "#######"
EndIf
ReDim S_Ball.S_Ball(index)
S_Ball.S_Ball(index)\TestBall = 7*index
EndProcedure
P_Create_MyBox(1)
P_Create_MyBox(2)
P_Create_MyBox(3)
P_Create_MyBall(1)
P_Create_MyBall(2)
P_Create_MyBall(3)
;--------------------------------------------------
Define i
For i = 1 To 3
Debug "-------------"
Debug S_Box.S_Box(i)\TestBox
Debug S_Ball.S_Ball(i)\TestBall
Next
beste Güße Skiller
