Seite 1 von 1

If List1()=List2() mit gleicher Structure

Verfasst: 26.01.2015 17:51
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?

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

Verfasst: 26.01.2015 18:52
von Nino
7x7 hat geschrieben: Ist für mich ein Bug! (PB 5.24 LTS)
Ist denn irgendwo dokumentiert, dass das funktionieren sollte?

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

Verfasst: 26.01.2015 20:27
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.

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

Verfasst: 26.01.2015 20:41
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()

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

Verfasst: 26.01.2015 21:20
von Nino
Also ist das offenbar kein Bug.

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

Verfasst: 28.01.2015 09:53
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 :| .

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

Verfasst: 28.01.2015 11:27
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)

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

Verfasst: 29.01.2015 17:55
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