Seite 1 von 2
Verschachtelte Struktur schnell leeren
Verfasst: 23.08.2005 17:58
von Laurin
Moin
Wieder mal 'ne Frage von mir ^^
Also ich habe eine verschachtelte Struktur ähnlich wie diese hier:
Code: Alles auswählen
Structure Struc_1
a.l
b.b
c.s
EndStructure
Structure Struc_2
d.l
e.b
f.s
g.Struc_1
EndStructure
Variable.Struc_2
; Variable wird nun mit Daten gefüllt.
Ich brauche die "Variable" nun öfters und ziwschen dem Verwenden muss sie immer wieder vollständig geleert werden. Nun ist meine Struktur arg groß und ich will nicht jedes einzelne Element auf 0 setzen.
Daher meine Frage: Gibt's eine Alles-Lösch-Variante (auch für verschachtelte Strukturen)?
Greetz Laurin
Verfasst: 23.08.2005 18:40
von Cadogan
Naja, ich will damit jetzt nicht andeuten, dass es eine sichere, geschweige denn gute Lösung wäre, aber vielleicht klappt es ja so?
Code: Alles auswählen
For x = 0 To SizeOf(Variable)
PokeB(@Variable + x, 0)
Next
Verfasst: 23.08.2005 18:44
von Laurin
Radikal, aber es scheint zu funktionieren. 0 bzw. "" kommt jedenfalls raus:
Code: Alles auswählen
Structure Struc_1
a.l
b.b
c.s
EndStructure
Structure Struc_2
d.l
e.b
f.s
g.Struc_1
EndStructure
Variable.Struc_2
Variable\d = 1
Variable\e = 2
Variable\f = "Hallo"
Variable\g\a = 3
Variable\g\b = 4
Variable\g\c = "Welt"
For x = 0 To SizeOf(Variable)
PokeB(@Variable + x, 0)
Next
Debug Variable\g\a
Debug Variable\g\b
Debug "String: " + Variable\g\c
Debug Variable\d
Debug Variable\e
Debug "String: " + Variable\f
Meine Frage dazu ist jetzt noch, ob das eine sichere Lösung ist und jetzt nicht nur zufällig hier funktioniert.
Verfasst: 23.08.2005 18:56
von Batze
Die Methode ist glaub ich bei Strings ungeignet, da dann nur die Addresse auf 0 geändert wird, und der String im Speicher bleibt.
Verfasst: 23.08.2005 18:58
von Cadogan
Jopp, das scheint zu stimmen:
Code: Alles auswählen
Structure Struc_1
a.l
b.b
c.s
EndStructure
Structure Struc_2
d.l
e.b
f.s
g.Struc_1
EndStructure
Variable.Struc_2
Variable\g\c = "33"
Debug Variable\g\c
Debug @Variable\g\c
For x = 0 To SizeOf(Variable)
PokeB(@Variable + x, 0)
Next
Variable\g\c = "33"
Debug Variable\g\c
Debug @Variable\g\c
Die Adresse des Strings ist beim zweiten Mal anders...
Aber evtl. würds gehen, wenn man für die Strings zunächst eine Extrabehandlung durchführt, also sie von Hand leert, und danach dann die radikale Methode durchlaufen lässt.
EDIT: OK, funktioniert anscheinend nicht...
Verfasst: 23.08.2005 19:07
von Batze
Hier mal eine kleine Funktion.
Ob die Funktioniert weiß ich aber nicht!
Code: Alles auswählen
Procedure EmptyStructure(Addr.l, Muster.s)
; Muster:
; B = Byte
; W = Word
; L = Long / Float
; S = String
For i=1 To Len(Muster)
Select Mid(Muster, i, 1)
Case "B"
PokeB(Addr, 0) : Addr + 1
Case "W"
PokeW(Addr, 0) : Addr + 2
Case "L"
PokeL(Addr, 0) : Addr + 4
Case "S"
PokeB(PeekL(Addr), 0) : Addr + 4
EndSelect
Next
EndProcedure
Verfasst: 23.08.2005 19:10
von Cadogan
Habs getestet, zumindest bei mir scheint sie zu funktionieren, also die Adresse des Strings bleibt die gleiche.
Verfasst: 23.08.2005 19:11
von Laurin
Lol, da muss ich ja jeden Datentyp einzelnd angeben. Da wäre das manuelle auf-0-setzen unkomplizierter.
Verfasst: 23.08.2005 19:14
von Batze
Laurin hat geschrieben:Lol, da muss ich ja jeden Datentyp einzelnd angeben. Da wäre das manuelle auf-0-setzen unkomplizierter.
Naja, dann tu das halt, aber so ist es doch wenigstens ein klein wenig leichter.
Statt sich zu bedanken noch motzen und nichts besseres vorschlagen
Verfasst: 23.08.2005 19:17
von Cadogan
So schwer isses aber doch net, geht ja viel schneller:
In dem Fall einfach
und gut is
