Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Records vergleichen


Nilsener - Mi 24.09.03 10:29
Titel: Records vergleichen
Hallo,
ich habe 2 Variablen: daten : pruefdaten und verify : pruefdaten. Vorher habe ich definiert: Type Pruefdaten = record eine ganze menge Variblen end;

Der Compiler läßt folgendes zu: daten:=verify;

Wenn ich vergleiche: if daten = verify then fehler:=false; erhalte ich die Fehlermeldung 'incompatible types' und der Cursor blinkt hinter dem 'then'.

Die einzelnen Elemente des Records zu vergleichen funktioniert: if daten.nullpunkt = verify.nullpunkt then fehler:=false; Das ist aber bei vielen Elementen sehr aufwendig.

Einige Ideen wie man das elegant löst ?


CenBells - Mi 24.09.03 10:47

hallo,

wenn du das häfiger brauchst, empfiehlt es sich eine eigene function zu schreiben, die zwei records übergeben bekommt und alle werte vergleicht. Anders lässt sich das bei Records meines wissens nach nicht machen.

Gruß
Ken


UC-Chewie - Mi 24.09.03 11:23

Doch, geht viel einfacher. Ein Record ist einfach eine Darstellung eines Stück Speichers. Das erste Feld beginnt an der Startadresse des Records, das letzte endet an der Endadresse.
Es gibt eine Funktion namens CompareMem:

Delphi-Quelltext
1:
2:
if CompareMem(@Record1, @Record2, Sizeof(TMyRecord)) then //Inhalt gleich
else //Inhalt verschieden


mb - Mi 24.09.03 11:30

:?: was hat das überhaupt mit der VCL zu tun?


mb - Mi 24.09.03 11:30

:?: was hat das überhaupt mit der VCL zu tun?


=> Sorry, ... wo ist die Delete-Funktion, wenn man zweimal auf Absenden geklickt hat?


Nilsener - Mi 24.09.03 12:16
Titel: Vielen Dank, problem gelöst
Vielen Dank für Eure Hilfe, sehr glücklich bin ich über die Lösung von UC-Chewie, ich habe es getestet, es funktioniert super.

Gruss Nils


Motzi - Mi 24.09.03 12:47

Ja, so wie UC-Chewie das macht mach ich das auch, ABER - wenn du in deinem Record einen String (ich mein jetzt einen LongString und keinen ShortString oder String[xxx]), ist das eine potenzielle Gefahrenquelle, da ein LongString nur ein Pointer ist - es kann also durchaus auch vorkommen, dass 2 LongStrings zwar denselben Text beinhalten, aber auf 2 unterschiedliche Adressen zeigen!!


Nilsener - Do 25.09.03 16:56

Danke, kann vorkommen das mit den LongStrings, muss ich drauf achten.

Gruss Nils