If List1()=List2() mit gleicher Structure

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

If List1()=List2() mit gleicher Structure

Beitrag von 7x7 »

Code: Alles auswählen

Structure x
	a$
	b$
	c.q
EndStructure

NewList Tabelle1.x()
NewList Tabelle2.x()

AddElement(Tabelle1())
Tabelle1()\a$="Hier steht was"
Tabelle1()\b$="Hier steht auch was"
Tabelle1()\c =1234

AddElement(Tabelle2())
Tabelle2()=Tabelle1()		;korrekterweise geht DAS!!

If Tabelle1()=Tabelle2()	;aber: DAS geht nicht!
	Debug "Yeah"
Else
	Debug "Kacke"
EndIf
Im obigen Vergleich werden lediglich Pointer von den aktuellen Tabellen-Elemente verglichen, was natürlich Blödsinn ist. Wenn ich DAS wollte, würde ich "If @Tabelle1()=@Tabelle2()" schreiben.
Ist für mich ein Bug! (PB 5.24 LTS)

Aber gut, hilft mir nicht weiter. Wie kann ich direkt zwei Tabellen-Elemente miteinander vergleichen, ohne explizit die ganze Structure einzeln durchzuackern?
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: If List1()=List2() mit gleicher Structure

Beitrag von Nino »

7x7 hat geschrieben: Ist für mich ein Bug! (PB 5.24 LTS)
Ist denn irgendwo dokumentiert, dass das funktionieren sollte?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: If List1()=List2() mit gleicher Structure

Beitrag von STARGÅTE »

7x7 hat geschrieben:Im obigen Vergleich werden lediglich Pointer von den aktuellen Tabellen-Elemente verglichen, was natürlich Blödsinn ist. Wenn ich DAS wollte, würde ich "If @Tabelle1()=@Tabelle2()" schreiben.
Ist für mich ein Bug! (PB 5.24 LTS)

Aber gut, hilft mir nicht weiter. Wie kann ich direkt zwei Tabellen-Elemente miteinander vergleichen, ohne explizit die ganze Structure einzeln durchzuackern?
Garnicht.
Es ist in PB generell so, dass Variablen/Elemente mit einer Struktur immer nur der Pointer verglichen oder übergeben wird. Du kannst ja genauso wenigig das Element (als Wert) an eine Prozedur übergeben.
Der Syntax Tabelle2() = Tabelle1() ist nur nachträglich als Compiler-Option eingefügt worden, als Ersatz für CopyStructure().
Da es aber kein CompareStructure gibt, wird es so eine Methode wie du es vorhast in nächster Zeit nicht geben.
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
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: If List1()=List2() mit gleicher Structure

Beitrag von Kiffi »

einzelne Elemente (sowie auch ganze LinkedLists, Arrays oder Maps) kann
man mit InsertJSON*() / ComposeJSON() vergleichen. Hier für einzelne Elemente:

Code: Alles auswählen

EnableExplicit

Structure x
	a$
	b$
	c.q
EndStructure

Define T1
Define T2

Define JS1.s
Define JS2.s

NewList Tabelle1.x()
NewList Tabelle2.x()

T1 = AddElement(Tabelle1())
Tabelle1()\a$="Hier steht was"
Tabelle1()\b$="Hier steht auch was"
Tabelle1()\c =1234

T2 = AddElement(Tabelle2())
Tabelle2()\a$="Hier steht was"
Tabelle2()\b$="Hier steht auch was"
Tabelle2()\c =1234


CreateJSON(0)
InsertJSONStructure(JSONValue(0), T1, x)
JS1 = ComposeJSON(0)
FreeJSON(0)

CreateJSON(0)
InsertJSONStructure(JSONValue(0), T2, x)
JS2 = ComposeJSON(0)
FreeJSON(0)

Debug JS1
Debug JS2

If JS1 = JS2
  Debug "Gleich"
Else
  Debug "Ungleich"
EndIf
Analog für die komplette LinkedList: InsertJSONList()
a²+b²=mc²
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: If List1()=List2() mit gleicher Structure

Beitrag von Nino »

Also ist das offenbar kein Bug.
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: If List1()=List2() mit gleicher Structure

Beitrag von 7x7 »

Code: Alles auswählen

Structure x
	a$
	b.q
	c.l
EndStructure

Define.s	Var1,Var11
Define.w	Var2,Var12
Define.l	Var3,Var13
Define.q	Var4,Var14
Define.b	Var5,Var15
Define.x	Var6,Var16


If Var1=Var11.........funktioniert wie gewünscht
If Var2=Var12.........funktioniert wie gewünscht
If Var3=Var13.........funktioniert wie gewünscht
If Var4=Var14.........funktioniert wie gewünscht
If Var5=Var15.........funktioniert wie gewünscht
If Var6=Var16.........?? absurd Result
Warum also eine Diskussion und Erklärungen? Ok, es ist kein "Bug" im herkömmlichen Sinn, weil es von Fred/Freak so gewollt ist. Aber es ist inkonsequent!
Wenn interne Gründe es nicht möglich machen, das Problem zu lösen, wäre eine Instruktion wie z.B "CompareElement(<Variable>,<Variable>)" sehr wünschenswert. Aber ein intelligenter Compiler wüsste auch so, was ich in diesem Fall meine :| .
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: If List1()=List2() mit gleicher Structure

Beitrag von Nino »

7x7 hat geschrieben:Warum also eine Diskussion und Erklärungen?
Vielleicht weil das hier ein Diskussionsforum ist? :D
Oder vielleicht weil das, was du hier als Bug gemeldet hast, gar kein Bug ist?
7x7 hat geschrieben:Ok, es ist kein "Bug" im herkömmlichen Sinn, weil es von Fred/Freak so gewollt ist. Aber es ist inkonsequent!
Dass Strukturvariablen anders funktionieren als einfache Variablen (wie dein obiges Beispiel zeigt), finde ich erstmal nicht besonders überraschend.

Code: Alles auswählen

If MeinArray() = DeinArray()
funktioniert ja beispielsweise auch nicht.

Dies ist der (verständliche) Wunsch nach einem neuen Feature in PB, aber keine Bug-Meldung.
(sehe gerade, dass dieser Thread inzwischen vom "Bugs"-Unterforum nach "Fragen - Allgemein" verschoben wurde)
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: If List1()=List2() mit gleicher Structure

Beitrag von 7x7 »

Nino hat geschrieben:
7x7 hat geschrieben:Warum also eine Diskussion und Erklärungen?
Vielleicht weil das hier ein Diskussionsforum ist? :D
Ok...hast ja Recht! War nur etwas verärgert über dieses Problem. Laufend ist irgend was anderes :D
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Antworten