Structure an andere Structure kopieren

Anfängerfragen zum Programmieren mit PureBasic.
Gast

Structure an andere Structure kopieren

Beitrag von Gast »

Hallö zusammen

ich les schon länger im board, hab mich bisher nicht getraut meine
bescheuerten Fragen zu stellen, aber ich komm da nicht weiter :cry:

Ich hab da eine eine variable match mit einer structure und die Werte von match sollen in 2 Arrays mitderselben struture kopiert werden, weil sie
dort weiterbenötigt werden.

Ich weiss aber beim Erstellen von match noch nicht wo in den arrays
abgelegt werden soll.

Hier der code

Code: Alles auswählen

Structure wettkampf
Spielort.s
datum.s
gegner.s
Ergebnis.s
Spieler_1.s
Spieler_2.s
Spieler_3.s
Spieler_4.s
Spieler_5.s
Spieler_5.s
Spieler_6.s
Spieler_7.s
Spieler_8.s
Spieler_9.s
Spieler_10.s
Spieler_11.s
Spieler_Ersatz1.s
Spieler_Ersatz2.s
Schiedsrichter.s
EndStructure


match.wettkampf
Dim jahresergebnisse.wettkampf(50)
Dim statistik.wettkampf(1000)

match\Spielort = "Wiesbaden"
match\datum = "24.7.2004"
match\gegner = "GSV"
match\Ergebnis = "2:4"
match\Spieler_1 = "Huber"
match\Spieler_2 = "Müller"
match\Spieler_3 = "Eszgön"
match\Spieler_4 = "Krallmann"
match\Spieler_5 = "König"
match\Spieler_6 = "Lindauer1"
match\Spieler_7 = "Lindauer2"
match\Spieler_8 = "Schwieken"
match\Spieler_9 = "Rülberg"
match\Spieler_10 = "Steenken"
match\Spieler_11 = "Schwelm"
match\Spieler_Ersatz1 = "Zeppelin"
match\Spieler_Ersatz2 = "Barth"
match\Schiedsrichter = "von Weilen"

;  jahresergebnisse(8) = match   ......geht nicht
;  statistik(124) = match 


[/code]

wenn ich das so schreibe wie in QB dann gibt es eine
Fehlermeldung.

Wie krieg ich die Werte von match in jahresergebnisse und in
statistik ohne daß ich jeden einzelnen Wert übergebe ??? :?:
Das möcht ich vermeiden da es nen Haufen Tipparbeit ist
und es gibt auch noch eine Inventarstructure mit über 60
Inhalten und da jeden Wert einzeln übergeben ist :( :( :( :(

Kann mir wer helfen ? Geht das mit Pointern oder so?
Ich habs schon mit Copymemory pobiert aber das funzt nicht
bei strings.

Danke !!!!

LUPO
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Code: Alles auswählen

Structure struct
    a.l
    b.l
    c.l
    s.s
EndStructure

v1.struct
v1\a = 5
v1\b = 7
v1\c = 10
v1\s = "hallo"

v2.struct 
CopyMemory(@v1,@v2,SizeOf(struct))
Debug v2\a
Debug v2\s
Probiers mal.. ist das das was du suchst? Bei mir gehts :)
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Oder halt so:

Code: Alles auswählen

<... Dein Code wie oben ...>

CopyMemory(@match, jahresergebnisse(8), SizeOf(wettkampf))

Debug jahresergebnisse(8)\Schiedsrichter 
Debug jahresergebnisse(8)\Ergebnis 
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
Lupo
Beiträge: 147
Registriert: 16.02.2005 15:15

Beitrag von Lupo »

Super ! Das ging ja fix. Danke.

Aber leider tuts alle 3 nicht. :cry: :cry:

Code: Alles auswählen

CopyMemory(@match, jahresergebnisse(8), SizeOf(wettkampf)) 

match\Schiedsrichter = "########"

Debug jahresergebnisse(8)\Schiedsrichter 
Debug jahresergebnisse(8)\Ergebnis
Da sollte doch jetzt jahresergebnisse( 8 ) \Schidsrichter doch
"von Weilen" anzeigen und nicht die ######## die sind ja
erst nach dem Copymemory geschriben worden.
Debug zeigt aber ########


Das ist ja mein Problem. Ich denk da werden nur die pointer kopiert
mit dem copymemory aber nicht die strings selbst. Was tun ?

Danke

LUPO
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Hier 3 Lösungsvorschläge:

1) Variable 'match' nicht mehr nach den kopieren benutzen
2) eigene Kopierroutine schreiben (see CopyMemoryString())
3) Wunschzettel an Fred absetzen:
Implemetierung einer CopyMemoryStructure() Funktion
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
Lupo
Beiträge: 147
Registriert: 16.02.2005 15:15

Beitrag von Lupo »

Die Variable match brauch ich leider wieder sonst hätte ich gleich ins
Array geschrieben.

ich hab wegen dem copymemeorystring () in der Hilfe gesucht aber
es gibt nix wegen structuren und so :cry:

Wie könnte ich denn aus der structure die Anzahl der Elemente
rauskriegen - ok die weis ich ja von der Definition, aber besser
wäre es wenn man das auslesen könnte.

Wenn ich das weis wie komme ich dann zu den pointern in den
arrays um mit copymemorystring die strings zu übergeben
wenn ich die elementnamen nicht eintippen will ?? :|

Ich hoff ich nerv euch nicht /:->

Danke

LUPO
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hm... was hier gebraucht wird ist

a) ein GetLenStruct, das die länge in bytes der benannten struktur ermittelt,
b) ein GetElementOffset, das den byte-abstand zwischen den einzelnen bestandteilen der stucture angibt

weis da jemand eine vorhandene, praktikable lösung?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Kaeru Gaman hat geschrieben:hm... was hier gebraucht wird ist

a) ein GetLenStruct, das die länge in bytes der benannten struktur ermittelt,
Meinst du sowas wie SizeOf()? ;)
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

ein GetElementOffset, das den byte-abstand zwischen den einzelnen bestandteilen der stucture angibt
Und mit OffsetOf() kannst du dir das auch basteln :D
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Kaeru Gaman hat geschrieben:weis da jemand eine vorhandene, praktikable lösung?
darauf wollte ich hinaus, ich wollte nur das problem einkreisen,
damit ihr so schnell und genau antworten könnt :wink: :allright:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten