Seite 1 von 1

2.kleine Spielerei mit StructureUnion und Structure löschen

Verfasst: 30.04.2008 21:44
von hjbremer
Hin und wieder steht man vor dem Problem den Inhalt einer StructurVariablen zu löschen.

Hier ein paar Ideen

Code: Alles auswählen

;1. Beispiel: Structur mit Zahlen löschen

Structure zahl
  a.l
  b.l
EndStructure

Structure zahlen
  StructureUnion
    q.zahl
    s.s{SizeOf(zahl)}
  EndStructureUnion
EndStructure

wert.zahlen
wert\q\a = 123
wert\q\b = 456

Debug wert\q\a
Debug wert\q\b

wert\s = ""

Debug wert\q\a
Debug wert\q\b

Debug "---"

;2. Beispiel: Structur mit ZahlenFelder löschen

Structure zahlF
  a.l
  b.l[6]
EndStructure

Structure zahlenF
  StructureUnion
    q.zahlF
    s.s{SizeOf(zahlF)}
  EndStructureUnion
EndStructure

ww.zahlenF
ww\q\a = 123
ww\q\b[0] = 456
ww\q\b[5] = 654456

Debug ww\q\a
Debug ww\q\b[0]
Debug ww\q\b[5]

ww\s = ""

Debug ww\q\a
Debug ww\q\b[0]
Debug ww\q\b[5]

Debug "---"

;3. Beispiel: Zahlen + FixString

Structure mix 
  a.l
  b.l
  d.s{10}
EndStructure

Structure zahlen_string
  StructureUnion
    q.mix
    s.s{SizeOf(mix)}
  EndStructureUnion
EndStructure

zs.zahlen_string
zs\q\a = 123
zs\q\b = 456
zs\q\d = "12.04.2008"

Debug zs\q\a
Debug zs\q\b
Debug zs\q\d

zs\s = ""

Debug zs\q\a
Debug zs\q\b
Debug zs\q\d

Debug "---"

;4. bei Structuren die normale Strings beinhalten
;   können NUR die Zahlen und FixStrings so gelöscht werden
;   und NUR wenn die normalen Strings am Ende stehen !!!

Structure max 
  a.l
  b.l
  d.s{10}
  e.s             ;muß am Ende stehen !!! beinhaltet den Zeiger auf den String
EndStructure

Structure maxi
  StructureUnion
    q.max
    s.s{SizeOf(max)-4} ;hier 4 Bytes abziehen für e.s
  EndStructureUnion
EndStructure

zz.maxi
zz\q\a = 123
zz\q\b = 456
zz\q\d = "12.04.2008"
zz\q\e = "Hallo du PBler"

Debug zz\q\a
Debug zz\q\b
Debug zz\q\d
Debug zz\q\e

zz\s = ""

Debug zz\q\a
Debug zz\q\b
Debug zz\q\d
Debug zz\q\e

Debug "---"


Verfasst: 30.04.2008 22:21
von DrShrek
Sorry....aber ich glaube Du hast StructureUnion nicht verstanden.
Lese bitte nochmal die Online Hilfe dazu.

Verfasst: 30.04.2008 23:14
von hjbremer
:mrgreen: :D :lol:

Verfasst: 03.05.2008 15:43
von NicTheQuick
@Dr. Shreck:
hjbremer trickst eben gerne. Und da bietet sich dieses Forum ja gut für an. :lol:

@hjbremer:
Klar ist es so einfach zu lösen, aber mir gefällt die doppelte Strukturierung
nicht. Deswegen baue ich mir dann z.B. ein Macro, das nur die Aufgabe hat,
eine Struktur zu löschen.
Das war jetzt nur ein Alternativvorschlag.

Verfasst: 03.05.2008 16:28
von hjbremer
yeah, ein Macro ist eine gute Lösung und meistens viel einfacher, auch die kleinen Fallen bei Fixstrings in Structuren und StructureUnion hat man dann nicht.

z.B. das Löschen von Fixstrings mit "" initialisiert den FixString mit chr(0), was oft nicht erwünscht ist.