Seite 1 von 2
Variables Array in Struktur
Verfasst: 09.02.2005 15:30
von Lebostein
Hallo,
und zwar habe ich eine Struktur, die ein Array enthält. Dieses Array soll für alle Strukturelemente das gesamt Programm hinweg eine konstante Größe haben (so wie es auch die Strukturdefinition verlangt). Nun soll aber diese feste Größe vom Benutzer zu Beginn des Programms (z.B. über eine INI-Datei) festgelegt werden. Leider kann ich aber bei der Größenangabe bei der Arraydefinition nur Konstanten benutzen und eine Konstante darf man nicht mit Datei-Lese-Funktionen verwenden. Gibt es hier irgendwie eine Möglichkeit?
Verfasst: 09.02.2005 15:44
von hardfalcon
Ich kenne mich zwar nicht so mit Arrays und Structures aus, aber was die Konstanten angelangt: Ich fürchte nein. Denn Konstanten sind doch (soweit ich weiss) keine Variabeln. Sie sollen ja keinen Speicher kosten, sondern nur den Sourceaufbau leichter nachvollziehbar machen. Konstanten sollten vor dem kompilieren vom Parser durch die entsprechenden (festen) werte Ausgetauscht werden. Sie dienen eigentlich nur als "statische Platzhalter".
Aber frag mal Fred, vielleicht kann er dir das so hinbiegen, dass du eine spezielle Version der entsprechenden Lib kriegst, die auch Variabeln animmt.
Ich hoffe, ich habe mich jetzt bezüglich derKonstanten nicht geirrt.
cya
Pascal
Verfasst: 09.02.2005 15:52
von Lebostein
Sowas hab ich mir schon fast gedacht....
Hier nochmal mein Problem in Form von Code:
Code: Alles auswählen
#menge = 10
Structure objekt
adress.l
flag.b
entity.w[#menge]
EndStructure
NewList objekt.objekt()
Und ich will jetzt, dass irgendwie der Inhalt der Konstante #menge bei Programmstart durch den Benutzer festgelegt werden kann.
Verfasst: 09.02.2005 15:57
von remi_meier
Um dynamische arrays mit dem (fast) gleichen Komfort zu benutzen:
Code: Alles auswählen
Structure Test
*Array
anzahlElemente.l
EndStructure
k.Test
k\anzahlElemente = 5
k\array = AllocateMemory(k\anzahlElemente * 4)
Dim Array2.l(0) ;Array für zugriff deklarieren
Array2() = k\array ;Array2 pointer auf structure array umbiegen
Array2(1) = 3 ;ganz normal wie ein array benutzen
Array2(2) = 54 ;er wird einfach in die structure geschrieben
SortArray(Array2(), 1,0,5) ;optionale parameter müssen angegeben werden, da PB hier die Grösse nicht weiss
Debug "----"
For z = 0 To k\anzahlElemente-1
Debug PeekL(k\array + z * 4)
Next
greetz
remi
EDIT:
hab grad gesehen, dass es auch ohne DisableDebugger geht...
Mit dieser Methode muss bei SortArray Start und Ende angegeben werden, da PB die Länge nicht kennt.
Mit diesem Trick kann man auch sehr einfach einen String auf ein Array aufsplitten:
Code: Alles auswählen
String.s = "hallo"
Dim Array.b(0)
Array() = @String
For z = 0 To Len(String) - 1
Debug Chr(Array(z))
Next
Achtung: Der Debugger erkennt so keine Übertretungen der Arraygrösse!
Verfasst: 09.02.2005 18:36
von Lars
@remi_meier
WOW, dass das mit PB geht wusste ich gar nicht, das ist
verdammt cool

Verfasst: 09.02.2005 18:55
von remi_meier
Gell
Wollen wir mal n Thread auftun mit all den undokumentierten Features?
(!, Array() = @string, OpenComPort()?, LParam()/WParam, KeyboardMode(),...)
Wär doch mal was

Verfasst: 09.02.2005 18:59
von Lars
remi_meier hat geschrieben:undokumentierten Features? (!, [...])
Das ist doch nicht undokumentiert für direkten Inline ASM?!
Verfasst: 09.02.2005 19:02
von remi_meier
Bist du dir sicher...

Verfasst: 09.02.2005 19:08
von Lars
remi_meier hat geschrieben:Bist du dir sicher...

LOL, das ist ja tatsächlich undokumentiert
War für mich dermaßen selbstverständlich, dass mein Unterbewusstsein
mir wohl vorgegaukelt hat, ich hätte das schonmal irgendwo gelesen

Verfasst: 09.02.2005 19:11
von remi_meier
Ging mir auch so, bis ich es im englischen Forum gelesen habe...
Ich glaub ich mach mal n Eintrag unter Code, Tipps...