2.kleine Spielerei mit StructureUnion und Structure löschen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

2.kleine Spielerei mit StructureUnion und Structure löschen

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

Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Sorry....aber ich glaube Du hast StructureUnion nicht verstanden.
Lese bitte nochmal die Online Hilfe dazu.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag von hjbremer »

:mrgreen: :D :lol:
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag 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.
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Antworten