Array Probleme...

Anfängerfragen zum Programmieren mit PureBasic.
Schlingel
Beiträge: 30
Registriert: 28.06.2007 20:06

Array Probleme...

Beitrag 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
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Welche Pb Version ?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Array Probleme...

Beitrag 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
a²+b²=mc²
Schlingel
Beiträge: 30
Registriert: 28.06.2007 20:06

Beitrag 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 ...
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Schlingel
Beiträge: 30
Registriert: 28.06.2007 20:06

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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..
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Schlingel
Beiträge: 30
Registriert: 28.06.2007 20:06

Beitrag 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...
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten