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?

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.
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?

Ok...hast ja Recht! War nur etwas verärgert über dieses Problem. Laufend ist irgend was anderes
