Einzelne objekte aus Liste in eine Andere Kopieren ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Einzelne objekte aus Liste in eine Andere Kopieren ?

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Einzelne objekte aus Liste in eine Andere Kopieren ?

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Re: Einzelne objekte aus Liste in eine Andere Kopieren ?

Beitrag 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 :'(
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Einzelne objekte aus Liste in eine Andere Kopieren ?

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Re: Einzelne objekte aus Liste in eine Andere Kopieren ?

Beitrag 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...
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Einzelne objekte aus Liste in eine Andere Kopieren ?

Beitrag 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
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Demivec
Beiträge: 49
Registriert: 22.02.2008 20:49
Wohnort: Utah, USA

Re: Einzelne objekte aus Liste in eine Andere Kopieren ?

Beitrag 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...
Bild
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Re: Einzelne objekte aus Liste in eine Andere Kopieren ?

Beitrag von Darky »

Danke echt Super :allright:


Mit CopyStructure() klappt es perfekt :) !


Gruß Darky :)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Einzelne objekte aus Liste in eine Andere Kopieren ?

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Demivec
Beiträge: 49
Registriert: 22.02.2008 20:49
Wohnort: Utah, USA

Re: Einzelne objekte aus Liste in eine Andere Kopieren ?

Beitrag 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:
Bild
Antworten