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

Code: Alles auswählen

EmptyStructure(@Variable, "lbslbs")
und gut is :D