Seite 1 von 5

Array Probleme...

Verfasst: 30.07.2007 14:54
von Schlingel
Hallo,

habe ein 2-dimensionals Array was innerhalb einer Procedure gefüllt wird.
Da aus irgendeinen kosmischen Zufall die weitergabe eines Arrays aus einer Procedure nicht geht bzw. nicht hineinprogrammiert wurde. Warum auch immer.... (oder geht das mitlerweile ? Wenn ja... sagt mir wie...)
Bin ich ein wenig am "Verzweifeln"... das Array muss/kann/soll ich in einer anderen Procedure weiterverarbeiten.

subject_filtern() <- Array wird befüllt
event_show() <- Array soll weiter verarbeiten werden...

Irgendwo hab ich gelesen Arrays sollen Global sein ? hmm.. jedenfalls kann das nicht stimmten der jenige hat wohl gelogen....
Da der Compiler mir sagt das es mein Array gar nicht gibt ...
Allerdings wird das Array erst in der Procedure Deklariert.. und so soll es auch bleiben.

Nun versteh ich nicht ganz wie ich das Array in event_show() bringen soll...
Gibt da ne Möglichkeit mit Pointer ich glaube mich erinnern zu können sowas mal gelesen zu haben...
----------------------
Ich hoffe es gibt da einen Weg, der mir Hilft, in der jetzt vorherschenden Abgeschlossenen Sache das zu erledigen. Sonst muss ich Variablen übergeben und woanders wieder auseinnander nehmen obwohl es zu der Proc. gehört.

Bye

Verfasst: 30.07.2007 14:56
von edel
Welche Pb Version ?

Re: Array Probleme...

Verfasst: 30.07.2007 14:58
von Kiffi
Schlingel hat geschrieben:Irgendwo hab ich gelesen Arrays sollen Global sein ?
das gilt nur für PB3.94 und kleiner.

ab PB 4.x muss ein Array global deklariert werden, um es in allen Prozeduren
verwenden zu können. Alles weitere -> Siehe PB-Hilfe

Code: Alles auswählen

Global Dim myArray()
Grüße ... Kiffi

Verfasst: 30.07.2007 15:18
von Schlingel
ab PB 4.x muss ein Array global deklariert werden, um es in allen Prozeduren
verwenden zu können
hmm... aber die Grenzen des Arrays werden ja erst in der Procedure bestimmt.... Ich will nicht im Deklarationbereich "Code" haben... da soll nur reine Deklaration sein xD
Aber anscheind komme ich nicht drumrum ...

Verfasst: 30.07.2007 15:26
von Kiffi
Schlingel hat geschrieben:hmm... aber die Grenzen des Arrays werden ja erst in der Procedure bestimmt
kannste ja mit ReDim() machen.

Grüße ... Kiffi

Verfasst: 30.07.2007 15:48
von Schlingel
Gut danke...

hmm.. aber so richtige Array Befehle fehlen in PB zumind. im Vergleich zu anderen Sprachen..
Gibt es einen Befehl wie CountArray() .... MaxArray() hmm.. oder ähnliches

Verfasst: 30.07.2007 15:51
von Kaeru Gaman
was soll Count machen?
Max soll das maximum eines numerischen arrays ermitteln?

sowas ist doch extrem easy selber zu schreiben.

außerdem können arrays auch Strings oder structures beinhalten.
für sowas ist ein Max-befehl doch unsinnig..

Verfasst: 30.07.2007 16:01
von Schlingel
nicht das maximum sondern das andere maximum... :P

es geht darum die größe des Arrays zu ermitteln...
hmm...

z.b. für eine For schleife

For i=0 to CountArray(Array())

next

Das ist ja wohl doch ein Sinnvolles Element...
Soweit ich mich erinnern kann, ist das auch in den meisten Sprachen schon Eingebaut .. auch in VB da gabs das auch dachte ich zumind.

Aber wenns sowas nicht gibt muss ich mir wohl oder übel was einfallen lassen...

Verfasst: 30.07.2007 16:08
von ts-soft

Code: Alles auswählen

Macro Ubound(array)
  (PeekL(@array - 8) - 1)
EndMacro
Desweiteren können Arrays auch als Parameter an eine Procedure
übergeben werden. Lbount wäre allerdings sinnlos, da Arrays in PB immer bei
0 beginnen :mrgreen:

Verfasst: 30.07.2007 16:33
von Kaeru Gaman
yo... und es ist auch eine frage des konzepts...

also, wenn ich ein festes Array habe, dann hab ich dort ja den entsprechenden wert,
wie groß mein Array ist, den verwende ich ja beim Dim, und der ändert sich nicht.

also um sowas zu machen:

Code: Alles auswählen

For i=0 to CountArray(Array()) 
benutzt man halt

Code: Alles auswählen

Dim Array( #ArraySize )
...
...
For i=0 to #ArraySize
wenn ich ein array des öfteren ReDim, dann habe ich auch dort den wert für das ReDim angegeben,
den kann ich dann auch dementsprechend mitführen, zurückgeben, was auch immer.

also, in den allermeisten fällen ist es ein zeichen für schlechte konzeption wenn man die größe seines Arrays erfragen muss.

wirklich variable datenbestände wird man eh nicht mit arrays lösen, sondern mit einer LinkedList.
dafür gibt es dann so schicke befehle wie ForEach, womit man jedes element der liste bearbeiten kann,
ganz unabhängig von der anzahl der elemente.