Seite 1 von 2
Einzelne objekte aus Liste in eine Andere Kopieren ?
Verfasst: 24.06.2012 20:38
von Darky
Hallo und einen schönen guten Abend liebe Gemeinde!
Also ich habe folgendes Problem: Ich habe 2 Listen mit einer eigenen Struktur und möchte nun nur einzelne Objekte in eine andere Liste Kopieren aber schaut euch am besten das Beispiel an :
Code: Alles auswählen
structure test
text.s
zahl.b
endstructure
global newlist a.test()
global newlist b.test()
; ****>>> Jetzt soll folgendes passieren ... nur das aktuelle Element aus a.test() soll nach b.test() kopiert werden :
; klappt aber leider nicht mit meinem bisherigem versuch :(
copymemory(@a(),@b(),sizeof(test))
so habe ein beispiel gepostet hoffe ist verständlich genug

wie kann ich so eine Kopie durchführen ohne alle objekte in der Liste einzeln zu kopieren also :
So will ich es nicht ! :
b\text=a\text
b\zahl=a\zahl
wäre sehr dankbar wenns dafür eine leichtere lösung geben würde weil entweder bin ich zu dusselig oder blind ! Das forum hat nichts hergegeben
Gruß aus Bochum
Darky
Re: Einzelne objekte aus Liste in eine Andere Kopieren ?
Verfasst: 24.06.2012 20:45
von RSBasic
Sowas?
Code: Alles auswählen
EnableExplicit
Structure test
text.s
zahl.b
EndStructure
Global NewList a.s()
Global NewList b.s()
Global a.test
Global b.test
AddElement(a())
a\text = "Hallo"
Debug a\text
CopyList(a(), b())
CopyStructure(@a, @b, test)
Debug b\text
Re: Einzelne objekte aus Liste in eine Andere Kopieren ?
Verfasst: 24.06.2012 20:49
von Darky
Ja es scheint doch bis jetzt mit Copymemory zu funktionieren ? :-/ würde gerne meinen ganzen code posten sind aber weit über 2000 zeilen

... jedenfalls klappt es oder ist es zu unsicher ?
jetzt hab ich noch ein Problem : Wenn ich ClearList(a()) aufrufe innerhalb einer Prozedur :-/ gibt es einen IMA obwohl es als Global definiert ist

... ich verzweifel langsam :'(
Re: Einzelne objekte aus Liste in eine Andere Kopieren ?
Verfasst: 24.06.2012 20:52
von RSBasic
Code: Alles auswählen
EnableExplicit
Structure test
text.s
zahl.b
EndStructure
Global NewList a.s()
Global NewList b.s()
Global a.test
Global b.test
Procedure TestClear()
ClearList(a())
ClearStructure(@a,test)
EndProcedure
;-------------------------
AddElement(a())
a\text = "Hallo"
Debug a\text
CopyList(a(), b())
CopyStructure(@a, @b, test)
Debug b\text
TestClear()
Debug a\text
Gibt bei mir kein IMA.
Re: Einzelne objekte aus Liste in eine Andere Kopieren ?
Verfasst: 24.06.2012 21:04
von Darky
Ja das problem ist aber das dein code die GANZE liste kopiert ich wollt aber zbs sowas :
Kopiere nur ELEMENT 7,33,14,11 von A() nach B() also zbs so
Code: Alles auswählen
selectelement(a(),33)
addelement(b())
copymemory(@a(),@b(),sizeof(test))
selectelement(a(),7)
addelement(b())
copymemory(@a(),@b(),sizeof(test))
selectelement(a(),11)
addelement(b())
copymemory(@a(),@b(),sizeof(test))
;....usw...
Re: Einzelne objekte aus Liste in eine Andere Kopieren ?
Verfasst: 25.06.2012 00:07
von CSHW89
Benutze statt CopyMemory
CopyStructure. Bei CopyMemory wird einfach nur der Speicherbereich kopiert. Das Problem ist, du benutzt ein String in deiner Struktur. In einer Struktur wird nur ein Zeiger zum String gespeichert. Den kopierst du, nicht den String selber. Mit dem CopyMemory-Befehl hast du dann zwei Elemente mit jeweils einer Variable 'text', die auf
einen String zeigen. Damit macht du das interne Stringmanagment von PB kaputt.
Wie gesagt, benutze CopyStructure:
lg Kevin
Re: Einzelne objekte aus Liste in eine Andere Kopieren ?
Verfasst: 25.06.2012 06:15
von Demivec
Darky hat geschrieben:Ja das problem ist aber das dein code die GANZE liste kopiert ich wollt aber zbs sowas :
Kopiere nur ELEMENT 7,33,14,11 von A() nach B() also zbs so
Code: Alles auswählen
selectelement(a(),33)
addelement(b())
copymemory(@a(),@b(),sizeof(test))
selectelement(a(),7)
addelement(b())
copymemory(@a(),@b(),sizeof(test))
selectelement(a(),11)
addelement(b())
copymemory(@a(),@b(),sizeof(test))
;....usw...
Sie würden dies nutzen:
Code: Alles auswählen
SelectElement(a(),33): AddElement(b()): b() = a() ;kopie
SelectElement(a(),7): AddElement(b()): b() = a()
SelectElement(a(),11): AddElement(b()): b() = a()
;....usw...
Re: Einzelne objekte aus Liste in eine Andere Kopieren ?
Verfasst: 25.06.2012 09:05
von Darky
Danke echt Super
Mit CopyStructure() klappt es perfekt

!
Gruß Darky

Re: Einzelne objekte aus Liste in eine Andere Kopieren ?
Verfasst: 25.06.2012 23:20
von STARGÅTE
Ich wollte nur noch mal als Nachtrag hinzufügen, dass man auch Listenelemente "direkt" kopieren kann, ohne CopyStructure:
Code: Alles auswählen
Structure Test
Long.l
String.s
Float.f
EndStructure
NewList A.Test()
NewList B.Test()
AddElement(A())
With A()
\Float = #PI
\String = "Hallo Welt!"
\Long = 123
EndWith
AddElement(B()) : B() = A() ; Kopieren geht auch ohne CopyStructure()
With B()
Debug \Float
Debug \String
Debug \Long
EndWith
Re: Einzelne objekte aus Liste in eine Andere Kopieren ?
Verfasst: 25.06.2012 23:40
von Demivec
STARGÅTE hat geschrieben:Ich wollte nur noch mal als Nachtrag hinzufügen, dass man auch Listenelemente "direkt" kopieren kann, ohne CopyStructure:
STARGÅTE: Ich zeigte, wie man die gleiche Sache in meinem Beitrag zu tun.
