![]() |
record vergleichen
Guten Morgen!
Ich hätte da noch eine Frage: Angenommen ich habe folgendes:
Delphi-Quellcode:
ich kann dann den Inhalt einer Variblen a vom Typ TRecDaten einer
TRecDaten = record
Messwert : TStuetzpunkt; Saved : boolean; end; Variablen b vom Typ TRecDaten sehr einfach zuweisen:
Delphi-Quellcode:
wenn ich aber vergleichen möchte, ob der Inhalt identisch ist,
b := a;
Delphi-Quellcode:
so bekomme ich:
if a=b then...
[Fehler] ttt.pas(310): Inkompatible Typen Muss ich die einzelnen Elemente vergleichen (was ja richtig viele sein können), oder geht's auch auf eine andere Art? Vielen Dank schon mal, StTüff |
Re: record vergleichen
Hallo StTüff,
Records als Packed deklarieren:
Delphi-Quellcode:
TRecDaten = packed record
Messwert : TStuetzpunkt; Saved : boolean; end;
Delphi-Quellcode:
sollte funktionieren.
IF CompareMem(@a, @b, sizeof(a)) THEN
// sind gleich |
Re: record vergleichen
Das wollte ich hören!
Vielen Dank! StTüff :-D |
Re: record vergleichen
Ich möchte darauf hinweisen, das die Methode CompareMem nur genutzt werden kann, wenn im Rekord keine Pointer enthalten sind (z.B. Objektbezüge, Strings :!: o.a.)
...:cat:... |
Re: record vergleichen
Hallo sakura!
Das ist in diesem Fall zum Glück nicht so, hast Du einen Vorschlag wie es in dem von Dir beschriebenen Fall zu realisieren wäre? Vielen Dank für den Hinweis. StTüff |
Re: record vergleichen
In diesem Fall würde ich eine eigene "CompareRecord"-Funktion schreiben, denn in diesem Fall musst du wirklich jedes Feld einzeln vergleichen...
|
Re: record vergleichen
Wenn Du statt Records Klassen verwenden würdest und statt der Felder published Properties, könntest Du mithilfe der RTTI (Runtime Type Information, siehe OH) selbst bei Referenzierten (Pointer als Recordfelder) oder Aggregierten (Unterrecords als Recordfelder) Objekten (dann Rekursiv) einen "tiefen Vergleich" durchführen.
Die Problematik entspricht im Wesentlichen dem Problem der der ![]() ![]() Wenn Dich dieser Ansatz interssiert, mache einen neuen Thread auf und wir könnten den Vergleich von Objekten mithilfe der RTTI diskutieren (leider erst heute nach Feierabend). |
Re: record vergleichen
Hallo!
Vielen Dank für den Hinweis. Leider habe ich momentan keine Zeit, so "tief" einzusteigen. Grundsätzlich interessiere ich mich natürlich für alles, was ich noch nicht kenne. Vielleicht komme ich noch mal auf Dein Angebot zurück, wenn's bei mir zeitlich besser passt. Gruß und noch mal besten Dank an alle! StTüff |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz