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 :D ... 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:

Code: Alles auswählen

CopyStructure(@a(),@b(),test)
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 :allright:


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. :wink: