Verschachtelte Struktur schnell leeren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Verschachtelte Struktur schnell leeren

Beitrag 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
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Cadogan
Beiträge: 22
Registriert: 27.05.2005 13:32
Kontaktdaten:

Beitrag 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
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Cadogan
Beiträge: 22
Registriert: 27.05.2005 13:32
Kontaktdaten:

Beitrag 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...
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Cadogan
Beiträge: 22
Registriert: 27.05.2005 13:32
Kontaktdaten:

Beitrag von Cadogan »

Habs getestet, zumindest bei mir scheint sie zu funktionieren, also die Adresse des Strings bleibt die gleiche.
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Lol, da muss ich ja jeden Datentyp einzelnd angeben. Da wäre das manuelle auf-0-setzen unkomplizierter.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Cadogan
Beiträge: 22
Registriert: 27.05.2005 13:32
Kontaktdaten:

Beitrag 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
Antworten